javaweb(二):JSP响应数据和浏览器解析数据的编码问题

来源:互联网 发布:c 网络编程视频教程 编辑:程序博客网 时间:2024/05/11 15:35

Servlet的doXXX方法中,以doGet(HttpServletRequest request,HttpServletResponse response);方法为例,其中的response参数具有getOutputStream()方法和getWriter()方法。

1、在Windows平台下,使用下面的语句

response.getOutputStream().write("abcd".getBytes());

response.getOutputStream().write("中文无乱码".getBytes());

输出响应内容时,在客户端浏览器中显示,均不会产生乱码,原因是:

String类的getBytes()方法,不含参数时,默认使用特定平台(此处为Windows)上的编码方案(此处为GB2312,是GBK编码的子集),而浏览器也是默认使用特定平台上的解码方案,所以不会产生乱码。

2、在Windows平台下,使用下面的语句

response.getOutputStream().write("中文有乱码".getBytes("utf-8"));

输出响应内容时,在客户端浏览器中显示,会产生乱码,原因如1.解决这个问题的办法是添加下面的语句:

response.setHeader("Content-Type", "text/html;charset=utf-8");

3、在Windows平台下,使用下面的语句

response.getWriter().write("中文有乱码");

输出响应内容时,在客户端浏览器中显示,会产生乱码,原因是:

上述语句没有指定服务器端的编码方案,tomcat容器会默认使用ISO8859-1编码方案对writer()方法中的字符串进行编码,而浏览器端是特定平台的解码方案,所以会产生乱码,可能是多个?符号,因为ISO8859-1查不到编码方案时,会编码成?,而其他编码方案都是兼容ISO8859-1的,所以能够显示发过来的?。

解决的办法是分别设置服务器端的编码方案和浏览器端的解码方案:

//设置服务器端编码方案response.setCharacterEncoding("utf-8");//设置浏览器端解码方案response.setHeader("Content-Type", "text/html;charset=utf-8");

另外:

使用下面的语句

response.setHeader("Content-Type", "text/html;charset=utf-8");
此时,因为设置浏览器解码方案了,服务器会自动使用对应的编码方案进行编码,也就是说,上面一句代码的作用,其实包含了3中的两句解决方案的作用。


最后,其实第1、2、3中所有的问题,可以用下面一句代码全部解决:

response.setContentType("text/html;charset=utf-8");


但是,为了不让其他人误解,建议还是要将下面的代码加上去:

response.setCharacterEncoding("utf-8");

0 0
原创粉丝点击