request与response的乱码问题的总结及解决方法

一. response的乱码问题:

    1,使用   字节流  向页面输出中文:
 不一定会出现乱码,因为中文字节数组默认是GBK,如果浏览器打开的默认编码也是GBK,就不会出现乱码,否则会乱码。
 解决办法:
 需要指定浏览器打开的时候的编码,response.setHeader("Content-Type","text/html;charset=UTF-8");
 需要指定中文字节数组采用的编码。
 例如:
 response.setHeader("Content-Type", "text/html;charset=UTF-8");
 OutputStream os = response.getOutputStream();
 os.write("中文".getBytes("UTF-8"));

    2,使用   字符流   向页面输出中文:
        一定会出现乱码,response:对象是由老外设计的 response缓冲区用的是ISO-8859-1编码.
        解决方案:
 需要将response的缓冲区的编码集修改了. response.setCharacterEncoding("");设置response缓冲区的编码。
 需要将浏览器默认打开时候编码进行设置.
 例如:
 response.setHeader("Content-Type","text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

 或者是一句话:
 response.setContentType("text/html;charset=UTF-8");(它就相当于上面的两句了)

二.  request的乱码问题:

     分为post请求和get请求:

     1,POST请求乱码 :request.setCharacterEncoding("utf-8");
     2,GET请求乱码
     解决方案一:修改server.xml
                <Connector port="80" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" URIEncoding="utf-8"/>
      但是必须有修改tomcat服务器配置文件权限

     解决方案二:逆向编解码
     username = URLEncoder.encode(username, "ISO8859-1");
     username = URLDecoder.decode(username, "utf-8");

     或者简化成:
     username = new String(username.getBytes("ISO8859-1"),"utf-8");

 

 

 

posted @ 2013-12-17 20:47  付建超  阅读(530)  评论(0编辑  收藏  举报