Java工作笔记:在jetty插件下调用C接口透传数据库正常但在Tomcat下中文出现乱码现象

一.猜想是Tomcat默认编码不对 

于是打开&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命令去编译代码后出现乱码,加入该插件后恢复正常。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值