黑马程序员技术交流社区
标题:
关于web的编码异常问题
[打印本页]
作者:
郝强勇
时间:
2013-3-13 15:22
标题:
关于web的编码异常问题
本帖最后由 黄玉昆 于 2013-3-16 13:48 编辑
我将response的编码形式response.setCharacterEncoding("UTF-8");注释掉,重新访问浏览器,“中国你好”可以正常显示,查看浏览器编码形式为UTF-8.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置response码表,以控制response以什么码表向浏览器输出
//response.setCharacterEncoding("UTF-8");
//指定浏览器以什么码表打开数据
response.setHeader("Content-type", "text/html;charset=UTF-8");
String str = "中国你好";
PrintWriter pw = response.getWriter();
pw.write(str);
}
我又将response的编码形式response.setCharacterEncoding("ISO8859-1");重新访问浏览器,仍然可以正常访问,“中国你好”可以正常显示,查看浏览器编码形式为UTF-8.
response.setCharacterEncoding("ISO8859-1");
response.setHeader("Content-type", "text/html;charset=UTF-8");
我又将上面两句代码顺序进行了交换,此时不能正常显示“中国你好”,显示为????,查看浏览器编码形式为ISO8859.
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("ISO8859-1");
我又将上面第二句代码的编码形式改为"gb2312",能正常显示“中国你好”,查看浏览器编码形式为gb2312.
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("gb2312");
我又将上面第一句代码的编码形式改为"gb2312",第二句改为能正常显示“中国你好”,查看浏览器编码形式为utf-8.
response.setHeader("Content-type", "text/html;charset=gb2312");
response.setCharacterEncoding("utf-8");
所以,综上我认为设置response和指定浏览器编码形式的两种方法可以相互覆盖,即如果指定了response编码形式,这种形式也会在浏览器使用。如果设置了浏览器的编码形式,response也会使用这种编码形式,只是我通过小实验得到结论,请教大仙们给予肯定?
补充一点:
如果代码指设置response的编码形式,即:
//下面这句代码注释了
//response.setHeader("Content-type", "text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
那么在火狐和IE中的效果还不一样,火狐就能正常显示,查看浏览器编码形式是utf-8。但在IE中就不能正常显示,查看浏览器编码形式是gb2312.
我觉得火狐在设置response编码时,会自动设置servlet的关于编码的响应头,并为其赋值为response的编码形式。但IE在设置response编码时,因为没有setHeader方法,所以不能找到servlet的关于编码的响应头,也就没办法为其赋值,浏览器的编码形式仍然为其默认的gb2312.
当然,以上都是我根据实验结构的猜测,还是请大仙们指教!!!
作者:
fighting
时间:
2013-3-15 09:01
各个浏览器广商的实现不一样,规范也大同小异,所以出现上面的结果很正确{:soso_e113:}
作者:
舒远
时间:
2013-3-15 09:28
response.setHeader("Content-type", "text/html;charset=utf-8");//这是HTTP协议相关的设置,通知浏览器使用utf-8模式解析html内容。
response.setCharacterEncoding("UTF-8");//这是设置响应流内容编码格式。两者各有用处。
所以最好在设置响应编码格式时,这两段代码都加上,因为你无法保证客户用什么浏览器的。
作者:
HM张超
时间:
2013-3-15 10:04
web
的编码有多个地方!我给你说几个地方吧,一个是jsp页面需要加入编码,
一个是开发工具最好有用编码,还有救是看你用的什么框架,
如果你用struts2的话那么简单了!,在struts2.xml配置一句话就可以了,
如果是其它的那么,你要在web.xml写过滤器,而且还有在写一个你跟你写的的差不多的一个类,
这是web的编码最常见的,看要看你 的提交方式了。
作者:
tianyun
时间:
2013-3-15 10:29
浏览器访问网页默认是会缓存的,你清理缓存试试。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2