释义:
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码;
response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;
request乱码解决方案:
原因:Http请求传输时将url以ISO-8859-1编码,服务器收到字节流后默认会以ISO-8859-1编码来解码成字符流(造成中文乱码)
解决办法1:我们需要把request.getParameter(“参数名”)获取到的字符串先用ISO-8859-1编码成字节流,然后再将其用utf-8解码成字符流
代码:
String str = new String(request.getParameter("参数名").getBytes("iso-8859-1"), "utf-8");
解决办法2:通过Tomcat配置文件,设置URL编码集(URIEncoding)设置编码。修改Tomcat/conf 目录下 server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
重点在 userBodyEncodingForURI 和 URIEncoding 这两个属性
response乱码解决方案:
原因:服务器发给浏览器的数据默认是按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。
解决办法:
1.设置服务器端的编码
response.setCharacterEncoding("utf-8”);
默认是ISO-8859-1;该方法必须在response.getWriter()之前进行设置!!!
2.
response.setContentType("text/html;charset=utf-8”);
等同于response.setHeader(“contentType”, “text/html;charset=utf-8”);它其实会覆盖response.setCharacterEncoding(“utf-8”)
例如:
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
resp.setContentType("text/html; charset=utf-8");
out.print("成功访问接口");
参考链接:
http://blog.csdn.net/wzygis/article/details/50964864
http://blog.csdn.net/zhupengqq/article/details/51093307