一.猜想是Tomcat默认编码不对
运行war包透传结果依然是乱码。
二.查资料可能是pom.xml配置问题
于是在pom.xml文件中添加插件
但是使用
三.使用Notepad文档编辑器,发现透传的乱码转成ANSI(GBK)编码显示正常。
所以可以断定jetty显示编码格式为UTF-8,而Tomcat显示编码格式为GBK。
于是又使用代码:
总结:(一)中这段代码只是规定使用UTF-8编码,透传过来的时候Java虚拟机编码为GBK,在用UTF-8编码查看肯定是乱码。
(二)中插件仅仅负责改变maven的默认编码格式,之前IDEA中默认使用UTF-8,所以看不到效果,后来我在新环境中使用mvn命令去编译代码后出现乱码,加入该插件后恢复正常。
于是打开&Tomcat_HOME&/conf/server.xml文件,修改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"/>
设置编码为UTF-8。 运行war包透传结果依然是乱码。
二.查资料可能是pom.xml配置问题
于是在pom.xml文件中添加插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
重新打包透传结果依然是乱码。 但是使用
三.使用Notepad文档编辑器,发现透传的乱码转成ANSI(GBK)编码显示正常。
所以可以断定jetty显示编码格式为UTF-8,而Tomcat显示编码格式为GBK。
于是又使用代码:
System.out.println(Charset.defaultCharset());
分别打印了Jetty和Tomcat下的系统默认编码。
结果显示jetty下的默认编码UTF-8,Tomcat下默认编码GBK
问题确定了,Jetty和Tomcat两个不同服务器下的默认编码不同的问题。于是在透传过来的byte[]数据转String格式数据时修改代码,自定义编码格式:
把
String str = new String(obj).trim();
修改为:
String str = new String(obj, Charset.forName("UTF-8")).trim();
重新打包部署到Tomcat运行成功,问题解决。 总结:(一)中这段代码只是规定使用UTF-8编码,透传过来的时候Java虚拟机编码为GBK,在用UTF-8编码查看肯定是乱码。
(二)中插件仅仅负责改变maven的默认编码格式,之前IDEA中默认使用UTF-8,所以看不到效果,后来我在新环境中使用mvn命令去编译代码后出现乱码,加入该插件后恢复正常。