文章目录


问题描述

在(tomcat)服务器端使用 request.getParameter("username"), 这个有时候会出现乱码,
而且tomcat服务器版本不同,是否出现乱码也可能不同。


解决方式

下面给出解决方式

  • 如果请求方式为POST提交,
    tomcat7、tomcat8(包括之前的版本)在获取中文参数时均会出现乱码,
    解决方式是在任何获取参数的代码之前,
    添加如下代码:
    request.setCharacterEncoding("utf-8");
  • 如果请求方式为GET提交,
    tomcat7中关于connector的编码默认为"iso8859-1",在获取中文参数时会出现乱码;
    tomcat8中connector的编码默认为"utf-8",在获取中文参数时不会出现乱码。
    所以,如果希望tomcat在获取中文参数时也没有乱码,
    可以将tomcat7中connector的编码改为"utf-8",
    修改方式为:
    找到tomcat7/conf/server.xml文件,将在<Connector>标签上添加如下配置:

在Tomcat8中,其对应的官方文档是这样说明的:

This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. 
If not specified, UTF-8 will be used unless the org.apache.catalina.STRICT_SERVLET_COMPLIANCE system property is set to true in which case ISO-8859-1 will be used.

翻译如下:
这指定了在解码URL之后内容时所使用的编码。<mark>如果没有设置 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true,则默认使用UTF-8</mark>,否则将使用"iso8859-1"。

但是在Tomcat的8.0之前版本官方文档里是这样写的说明:

This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

翻译如下:
这指定了在解码URL之后内容时所使用的编码。如果没有指定,将使用"iso8859-1"。