您的位置:首页 > 运维架构 > Tomcat

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

2018-03-22 16:50 399 查看
在 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方式传值中文乱码

在后台转换编码,如下:

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


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

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

修改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 乱码 url