request、response 中文乱码问题与解决方式

request乱码

浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码。

response乱码

服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码。

乱码产生的原因

不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的。以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器之间的通信实质上是socket流,所以要先将请求参数(字符)转换成字节,也就是编码过程,服务器接收到请求参数后进行解码(字节转字符),然后封装到request对象中。如果客户端的编码与服务器端的解码不统一,就会导致通过request获取到的请求参数的值是乱码。

解决response乱码

服务器发给浏览器的数据默认按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。对于response乱码,只需要在服务器端指定一个编码字符集,然后通知浏览器按照这个字符集进行解码就可以了。

有三种方式:

A、设置服务器端的编码 response.setContentType("text/html"); response.setCharacterEncoding("utf-8”); B、通知浏览器服务器发送的数据格式 response.setContentType("text/html;charset=utf-8”); C、浏览器使用utf-8进行解码 注:A、B两种方法必须在response.getWriter()或response被提交之前进行设置,二者会相互覆盖,设置一种即可。 response.setContentType()的作用是使客户端浏览器,区分不同种类的数据, 并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。 例如:web浏览器就是通过MIME类型来判断文件是GIF图片,通过MIME类型来处理json字符串。 Tomcat的安装目录confweb.xml 中就定义了大量MIME类型 ,可以参考。 response.setContentType(“text/html; charset=utf-8”); html response.setContentType(“text/plain; charset=utf-8”); 文本 response.setContentType(“text/JavaScript; charset=utf-8”); json数据 response.setContentType(“application/xml; charset=utf-8”); xml数据

解决request乱码

现在有两种解决办法: 一、在Servlet的get或post方法中使用response.setCharacterEncoding("UTF-8");

二、在Servlet的get或post方法中把getWriter()方法注释掉就没有乱码了 //PrintWriter out = response.getWriter();

经验分享 程序员 微信小程序 职场和发展