关闭

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

标签: servletsetCharacterEncodingsetContentType乱码编码
555人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59504次
    • 积分:1344
    • 等级:
    • 排名:千里之外
    • 原创:79篇
    • 转载:13篇
    • 译文:0篇
    • 评论:2条
    最新评论