黑马程序员技术交流社区

标题: 【上海校区】HttpServletResponse响应乱码问题分析 [打印本页]

作者: 阿莱    时间: 2019-1-15 16:47
标题: 【上海校区】HttpServletResponse响应乱码问题分析
本帖最后由 阿莱 于 2019-1-17 16:03 编辑

前言:

由于计算机中的数据是以二进制形式存储的,因此,当传输中文的时候,就会发生字符和字节之间的转换。当响应的数据是正文的时候,会发生编解码不一致的问题,在浏览器生会出现乱码的问题。

以下是响应乱码的分析以及两种解决方案:

一、乱码的演示

[Java] 纯文本查看 复制代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取响应的字符流
        PrintWriter out = response.getWriter();

        //向浏览器响应:我是努力的小白
        out.print("我是努力的小白");
    }

测试结果:???????

乱码产生的原因以及解决方案:


二、第一种解决方案

设置服务器的编码方式为GB2312,注意要在响应数据之前进行设置。


[Java] 纯文本查看 复制代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    //设置tomcat的编码方式为:GB2312
    response.setCharacterEncoding("GB2312");
   
    //获取响应的字符流
    PrintWriter out = response.getWriter();

    //向浏览器响应:我是努力的小白
    out.print("我是努力的小白");
}

测试结果:
我是努力的小白

存在的问题:

通过浏览器的F12的查看响应的数据,依然是乱码:


小结:

这种解决方案作为了解,可以帮助我们更好的理解乱码产生的原因。

三、第二种解决方案

设置tomcat的编码为:UTF-8,浏览器的解码方式为:UTF-8

[Java] 纯文本查看 复制代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    //设置tomcat的编码方式为:UTF-8
    response.setCharacterEncoding("UTF-8");

    //设置浏览器的解码方式为:UTF-8
    response.setHeader("Content-Type","text/html;charset=UTF-8");

    //获取响应的字符流
    PrintWriter out = response.getWriter();

    //向浏览器响应:我是努力的小白
    out.print("我是努力的小白");
}


测试结果:
我是努力的小白

查看浏览器响应数据:

通过浏览器的F12的查看响应的数据,不再是乱码:




上述方式写起来比较麻烦,可以简写为:
[Java] 纯文本查看 复制代码
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置tomcat的编码方式为:UTF-8
//        response.setCharacterEncoding("UTF-8");

        //设置浏览器的解码方式为:UTF-8
//        response.setHeader("Content-Type","text/html;charset=UTF-8");

        //相当于上述两行代码的简写
        response.setContentType("text/html;charset=UTF-8");

        //获取响应的字符流
        PrintWriter out = response.getWriter();

        //向浏览器响应:我是努力的小白
        out.print("我是努力的小白");
    }


总结:
乱码产生的原因无非是两种原因:
一是:编码的方式不支持中文
二是:编解码不一致。
方案一作为了解,方案二的简写是我们在web阶段经常使用的解决响应乱码的一种方式。






作者: 一个人一座城0.0    时间: 2019-1-16 09:14
看一看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2