纠结了数日,终于搞定了乱码问题,归结是tomcat配置问题,在tomcat server.xml中有2个参数是配置编码的,一个是URIEncoding,另一个是useBodyEncodingForURI.
1. URIEncoding
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.
参数值为字符集,比如"UTF-8"等,这个参数在对http-get请求时有效,很多时候get请求的乱码起源,就是来自这里.任何http-get请求首先经过tomcat进行编码,编码的字符集就是使用"URIEncoding",编码之后整理成httpServerRequest参数交付给application;如果自己的web application也使用了各种url编码(比如在web.xml中配置Filter等),仍然无法改变tomcat对查询字符串编码的结果.
2. useBodyEncodingForURI
This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding. This setting is present for compatibility with Tomcat 4.1.x, where the encoding specified in the contentType, or explicitly set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false .
参数值为"true"或"false",表示"是否使用contentType中的encoding方式对URI进行编码";如果为true,且http请求中,在contentType中指定了编码方式,那么将采用contentType的编码方式去解码url之后的查询参数,将忽略URIEncoding的配置.此参数仍然只对http-get请求有效,tomcat无需对post请求进行编码.
所以在get请求时,如果contentType指定了编码方式,将会带来一定的问题(最大的问题就是,服务器端对查询字符串的编码方式无法统一),最后我决定让 useBodyEncodingForURI 参数保持默认(false):即所有的URL查询字符串的编码采用URIEncoding的参数(UTF-8),服务器端编码保持原来的统一方式.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>
相关推荐
解决tomcat中文乱码的问题!!!!!! !!!!!!!!!!!!!!!!!!!
解决tomcat中文乱码问题,有详细的解释说明,希望对需要的人有所帮助
解决tomcat中文乱码问题.doc,很宝贵的资料。
一般我们所装的linux服务器,是中文版的,所以系统环境的编码是gbk,然而我们项目的编码是UTF-8,这就必须在tomcat的server.xml文件中修改,在两个地方添加 URIEncoding="UTF-8",具体代码如下:
Docker容器部署tomcat出现中文乱码.docx
tomcat日志乱码处理方法总结。自己研究,可解决任何tomcat乱码问题
Tomcat请求访问流程(逻辑).vsdx
部署tomcat下的项目 监控的时候发现 日志中文乱码 ,tomcat 下catalina.out 日志乱码问题处理
Myeclipse Tomcat 控制台乱码设置
tomcat get提交中文乱码解决方案,修改tomcat server.xml 中以下为
解决Tomcat乱码的问题
Tomcat中文乱码处理方法.docx
现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类。 1)JSP页面中显示中文乱码 在JSP文件中使用page命令指定响应结果的MIME类型,如;charset=gb2312" %>
Tomcat环境下JSP中文乱码问题的解决
Tomcat请求处理UML序列图 序列图 UML序列图 请求处理UML序列图
Tomcat中文乱码解决方法参考.pdf
tomcat中server配置文件的结构,以及处理一个http请求的全过程
springboot打包成war,放到外部tomcat中,post请求参数中文乱码,以及tomcat控制台中文乱码问题
将cmd编码格式永久改为utf-8,解决部署以后tomcat乱码问题