一、请求乱码问题
乱码原因:由于在解析过程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时会出现乱码。
- GET请求
- Tomcat8.0及以上版本不会乱码
- Tomcat7及以下版本会乱码,解决方式:
new String(request.getParameter(“name”).getBytes(“ISO-8859-1”), “UTF-8”);
- POST请求
- 会乱码,通过设置服务器解析编码格式解决:
request.setCharacterEncoding(“UTF-8”);
- 会乱码,通过设置服务器解析编码格式解决:
二、响应乱码问题
乱码原因:因为服务器响应会经过网络传输,服务器端和客户端编码方式不一致,则会导致乱码。
- getWriter()字符乱码
对于 getWriter()获取到的字符流,响应中文时必定乱码,因为服务器端默认使用ISO-8859-1编码方式,不支持中文,解决方式:
response.setCharacterEncoding(“UTF-8”);
同时还要保证客户端解码方式与服务器端编码方式一致
response.setHeader(“content-type”, “text/html;charset=utf-8”);
以上两端编码可以用一句代替:
response.setContentType(“text/html;charset=utf-8”);
- getOutputStream()字节乱码
对于 getOutputStream()获取到的字节流,响应时可能会出现乱码,解决方式还是保持两端编码方式一致:
response.setHeader(“content-type”, “text/html;charset=utf-8”);
因为是字节流,所以还要设置流的编码方式:
outputStream.write("<h1>你好</h1>".getBytes(StandardCharsets.UTF_8));