Tomcat中文乱码的问题

中文乱码有两种来源,即输入乱码和输出乱码。
输入乱码即接收参数的时候乱码,输出乱码即输出中文到页面的时候乱码。
1. 输入乱码
为什么会乱码?

在tomcat中,对于post和get请求,默认的编码是ISO-8859-1,但是该编码不支持中文,所以就乱码了。

解决方法(两种方式)
  1. 转码。将接收到的参数按照ISO-8859-1的编码还原成二进制的形式,而后再使用utf-8编码将二进制数据还原成字符串。
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String info = req.getParameter("info");
        byte[] data = info.getBytes("ISO-8859-1");
        info = new String(data, "UTF-8");
        System.out.println("info = "+info);
    }
  1. 设置characterEncoding,修改配置文件。
  • 针对POST方式,可以设置characterEncoding
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String info = req.getParameter("info");
        System.out.println("info = " + info);
    }
  • 针对GET方式,可以通过修改配置文件server.xml(apache-tomcat/conf/server.xml)中的来解决。
    原始的配置:
配置一:
    

修改后的配置:

配置二:
    

配置二中,比配置一多了一个URIEncoding配置,该配置如果不指定,默认的是ISO-8859-1编码。apache官方(文档位于apache目录/webapps/docs/config/http.html)的说明如下:

Connector说明信息
2. 输出乱码

解决方法:设置输出的MIME类型和编码方式

resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");

或者通过以下代码来设置:

resp.setContentType("text/html;charset=utf-8");

你可能感兴趣的:(Tomcat中文乱码的问题)