本帖最后由 黄玉昆 于 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.
当然,以上都是我根据实验结构的猜测,还是请大仙们指教!!!
|
|