zoukankan      html  css  js  c++  java
  • Servlet类与前端进行数据交互

    本文转自:https://blog.csdn.net/kevinr1990/article/details/78655407

    Servlet与页面之间的中文乱码问题

    1介绍

    很多时候,我们在写JavaEE的Servlet程序时,需要从前端页面获取数据,在控制台打印输出,或者在Servlet中设置名称,在其它页面显示或其他程序中输出等。如果数据带有中文字符,经常容易出现乱码问题。
    现在对各种乱码的情况做一个归纳:

    2原因分析

    乱码产生的原因是在一方编码后,另一边解码时,解码的字符集和编码的不一致而导致的。可以简单理解为(各种字符需要先编码以后,再传输,对方接收以后再按照指定的字符集进行解码,同时显示到页面,或者打印到控制台)。

    不同数据来源的编(解)码格式不同:

    数据来源 默认编码格式
    浏览器页面 GBK
    (可在浏览器页面右键切换)
    request(get) ISO-8859-1
    request(post) GBK(同浏览器),但是如果是服务器来的页面一般已经设置了UTF-8(例如JSP提交的页面)
    Servlet(response) ISO-8859-1

    3乱码处理方式

    接收中文乱码(就是页面向服务器提交数据)

    get方式  
        解决方式:new String(string.getBytes("ISO-8859-1"),"UTF-8");
        分析:表单中文数据在页面以ISO编码后,通过Http协议传输,到达Servlet后,若以UTF-8解码,会出现乱码。所以需要先转成字节(ISO-8859-1解码,传过来的是以它编码的),再包装成字符串(UTF-8编码)。Servlet中就可以显示了(UTF-8)。
    post方式 
        解决方式:request.setCharacterEncoding("UTF-8");
        分析:这里单向设置服务器端的解码方式UTF-8即可(注意是通过request设置)。因为从服务器来的页面一般已经设置成了UTF-8格式了(例如JSP提交的页面)。
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出中文乱码(服务器向页面输出)

    字符流
        解决方式一:response.setContentType("text/html;charset=UTF-8");
        等价于解决方式二:response.setCharacterEncoding("UTF-8");//UTF-8编码
                        response.setHeader("Context-Type","text/html;charset=utf-8");
                        //通知浏览器UTF-8解码网页文件
        分析:方式一和方式二作用一样。这种场景一般是Servlet程序中有中文字符,需要向页面输出。先设置服务器端的编码方式UTF-8(注意是通过response设置),再通过设置响应的头字段,通知浏览器以UTF-8进行解码即可。
    字节流
        解决方式:response.setHeader("Content-Type", "text/html;charset=UTF-8"); 
                // 设置浏览器默认打开的时候采用的字符集编码
                response.getOutputStream().write("中文".getBytes("UTF-8"));    
                // 设置中文转成字节数组的时候取出的编码,默认会是ISO-8859-1
        分析:字节流的中文输出包括两步:先通知浏览器以UTF-8解码。再想页面(字节流)输出字节。输出内容:将中文字符串转成字节数组(并设置以指定的UTF-8编码)。
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4注意

    1,一般情况下,JSP页面的默认编码字符集要设置成UTF-8。否则无法完成中文显示和数据传输。这里不考虑GBK的情况
    2,在服务器端的程序之间,数据传输都是以UTF-8格式传输的。所有不用考虑中文乱码问题
    3,setCharacterEncoding(“UTF-8”)是设置字符集,request调用是设置解码方式(因为是从页面过来的),而response调用时设置编码方式(因为要想页面输出内容,先在Servlet中编码)
    4,getBytes(“UTF-8”);方法通过字符串调用,是按照指定字符集编码。
    5,new String(string.getBytes(“ISO-8859-1”),”UTF-8”);方法将string字符串先以原始(ISO-8859-1)进行解码转成字节数组,在以(UTF-8)编码封装成新字符串。

  • 相关阅读:
    luogu1060开心的金明
    luogu1048采药
    uva1025城市里的间谍
    scoi刷题记录(2019/04/07)
    差分及树上差分的正确食用姿势(2019/2/21学习笔记)
    图论技巧(2019/1/28之一)
    考试反思(2019/1/26学习笔记)
    考试反思(2019/1/22)
    「一本通 5.2 例 5」皇宫看守
    「一本通 5.2 例 3」数字转换
  • 原文地址:https://www.cnblogs.com/muyouzhi/p/12864850.html
Copyright © 2011-2022 走看看