A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝强勇 中级黑马   /  2013-3-13 15:22  /  1163 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

点评

如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-16 08:10

4 个回复

倒序浏览
各个浏览器广商的实现不一样,规范也大同小异,所以出现上面的结果很正确{:soso_e113:}
回复 使用道具 举报
response.setHeader("Content-type", "text/html;charset=utf-8");//这是HTTP协议相关的设置,通知浏览器使用utf-8模式解析html内容。
response.setCharacterEncoding("UTF-8");//这是设置响应流内容编码格式。两者各有用处。
所以最好在设置响应编码格式时,这两段代码都加上,因为你无法保证客户用什么浏览器的。
回复 使用道具 举报
web
的编码有多个地方!我给你说几个地方吧,一个是jsp页面需要加入编码,
一个是开发工具最好有用编码,还有救是看你用的什么框架,
如果你用struts2的话那么简单了!,在struts2.xml配置一句话就可以了,
如果是其它的那么,你要在web.xml写过滤器,而且还有在写一个你跟你写的的差不多的一个类,
这是web的编码最常见的,看要看你 的提交方式了。
回复 使用道具 举报
浏览器访问网页默认是会缓存的,你清理缓存试试。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马