Servlet中的编码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet中的编码问题相关的知识,希望对你有一定的参考价值。

对于response.setContentType()和response.setCharacterEncoding()的理解:

经过一些实践,对着两个方法有了一些自己的理解,有可能今后的学习中会发现自己现在得理解是错误的,到时候再改吧。

setCharacterEncoding()方法的作用是指定对服务器响应进行重新编码,与此同时,浏览器也会根据这个参数进行解码。所以,无论将此方法的参数设定为“UTF-8”还是“GBK”,浏览器均能正确显示中文。

如:

代码为

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//response.setContentType("text/html;charset=UTF-8");

浏览器显示如下:

技术分享

代码为:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("GBK");
// response.setContentType("text/html;charset=UTF-8");

 

浏览器显示如下:

技术分享

 

而setContentType()方法的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。

由于对Tomcat的server.xml进行了修改,将其默认编码改为了UTF-8,如下:

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />

(现在的理解,不一定正确)这就将服务器端的默认中文编码设定成了UTF-8,即在没有进行任何设置的情况下,编写的servlet程序中的汉字将用UTF-8的方式发送给客户端。我查到了eclipse浏览器的默认编码方式--GBK,如下图:

技术分享

 

因此,若不使用setContentType()或setCharacterEncoding()进行设置,服务器将用UTF-8的编码方式向客户端发送数据,而浏览器将用GBK编码显示接收到的数据,这就会导致乱码。

但是!!!但是!!!并不是这样的!!!!

 通过实践,终于懂得了正确的解释。

在eclipse中,工作区中的文字的编码类型就是上图红圈中所设置的类型。当选项选为GBK时,在不用setCharacterEncoding()方法进行设置时,eclipse  代码中传递的数据就会以GBK编码格式发送出去,此时若用setContentType()方法将浏览器显示编码设置为“GBK”,则不会出现乱码,如下:

代码为

request.setCharacterEncoding("UTF-8");
//response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");

浏览器显示:

技术分享

若用setContentType()将浏览器显示编码设为“UTF-8”则会出现乱码,如下:

代码为:

 

request.setCharacterEncoding("UTF-8");
//response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=UTF-8");

 

 浏览器显示:

技术分享

 

 

最后,我还是没弄清楚这两个方法同时使用为什么会导致“失效”,这有待进一步思考。

2017-10-01  22:08:34

以上是关于Servlet中的编码问题的主要内容,如果未能解决你的问题,请参考以下文章

Servlet中的编码问题

servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

使用凌空json数据的片段中的Recyclerview?

实现一个servlet从编码到部署,需要做哪些工作

Servlet,JSP 中的中文乱码问题以及解决方案

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章