JavaWeb中的乱码问题
1.请求乱码
Tomcat8 之前
前端用户发过来的请求中的中文数据后台接受后会显示乱码问题,需要手动处理。使用req.setCharacterEncoding(“utf-8”);来解决。
注意:
1.该处理方式只对post请求有效。
2.req.setCharacterEncoding(“utf-8”)应放在req.setCharacterEncoding(“utf-8”)之前,否则还是出现乱码问题。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
}
Tomcat8 之后
Tomcat 内部已对get请求做了中文处理,不需手动处理,但post请求仍需用**req.setCharacterEncoding(“utf-8”)**手动处理。
2.响应乱码
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
resp.write("响应成功");//浏览器显示乱码
}
解决方法:
在使用resp.write(“响应成功”);之前设置响应编码resp.setContentType(“text/html;charset=utf-8”);
3.IDEA中Tomcat的启动日志乱码
方法一:修改tomcat ----> config ----> logging.properties文件,添加编码设置,如图所示
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.encoding = UTF-8
但这样会出现控制台输出打印乱码的问题:如图所示
方法二:在JVM的启动时添加启动命令
-Dfile.encoding=utf-8