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中的编码问题的主要内容,如果未能解决你的问题,请参考以下文章