解决Tomcat请求中文乱码的问题

在 Tomcat 中处理带中文参数的get请求时,照着以往的做法,发现还是乱码,这让我丈二和尚摸不着头脑,结果一查询才发现,我所使用的 Tomcat8 已经对get方式中文乱码进行了处理。Tomcat8 中终于不用为了编码而折腾了。

原因

在Tomcat中,所有字符默认是按ISO-8859-1的编码格式来编码的,这是欧洲使用的一种字符编码格式。在浏览器发起http请求时,将请求的url以及参数按服务器指定的UTF-8编码后发送到Tomcat,这时Tomcat并不知道发送来的字符是按什么编码的,使用默认的ISO-8859-1格式来解析字符,导致中文乱码。Tomcat Http请求中文乱码

解决

Tomcat8

高版本 Tomcat 中,Tomcat8 对 GET 的默认解码为 UTF-8。只要没有对 server.xml Connector 元素进行改动(对编码部分进行参数配置),那么,Tomcat8 对 GET 的默认解码则为 UTF-8。也就不会乱码了。

Tomcat7 及以下

Tomcat7 及以下版本,GET 方式提交的参数编码,只支持 ISO8859-1 编码。因此,有三个解决中文参数乱码的方法: get方式传值中文乱码

  1. 在后台转换编码,如下:

    String bname = request.getParameter("bname"); 
    bname = new String(bname .getBytes("iso8859-1"),"utf-8"); 

    当然,前提是你页面编码就是 UTF-8。如果是 GBK,那上面那句代码后面就改成 GBK。

  2. 在客户端使用 encodeURI() 对中文参数进行编码,在服务器端需要进行解码this.setName(java.net.URLDecoder.decode(name, “UTF-8”));

  3. 修改tomcat的server.xml文件

    <Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           -- 添加参数 -->
           URIEncoding="GBK" 
           useBodyEncodingForURI="true"/>

    同样的,URIEncoding 需要与页面编码保持一致。

    URIEncoding 是请求的 URL 中字符的编码,会将 URL 中 %xx 这样的 URL 按这里指定的编码格式去解码,如果不指定则会使用默认的 ISO-8859-1 。

    useBodyEncodingForURI=”true”,该属性是使用 body 体的编码格式去解析 URL 中的 %xx。

总结

Tomcat8 好。

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