乱码问题——Tomcat编码与单元测试编码不一致

问题特征:Junit测试环境下编码为UTF-8,部署到Tomcat环境下编码变成GBK,从而产生乱码问题

工程类型:java web

开发工具:Intellj Idea 

 

部署环境:Tomcat 8.5, Windows 10 x64 ,JDK 1.80 x64 ,Mysql 5.1

问题经历:笔者在开发web工程时,在进行junit单元测试时,字符串编码为UTF-8,数据库插入中文时正常,如图1,但是在部署到Tomcat时出现了中文乱码问题,如图2,顺藤摸瓜,找到了问题所在:字符串编码出现问题——字符串编码格式成为了GBK,由于是在部署到Tomcat容器内出现的问题,立马将问题锁定在了Tomcat的配置,首先尝试的是修改Tomcat conf 问价下的配置文件server.xml,如图3,但是结果还是乱码,这个方法只能解决get,post请求产生的乱码,即在前后端连通的情况下。但是对于后端代码的编码问题却无法解决。后来尝试使用spring自带的过滤器仍然不能解决问题,最终解决方案是:修改tomcat编码java文件的格式,操作如下:1.找到tomcat文件夹 2.搜索catalina.bat 3.编辑catalina.bat 4.搜索 JAVA_OPTS=%JAVA_OPTS% 5.找到两个结果之后,在两个JAVA_OPTS=%JAVA_OPTS%之后添加 -Dfile.encoding=UTF-8 6.保存退出,重新部署项目后,问题得到彻底解决。

总结:java web 编码问题是很容易发生的,因为有很多环节会出现编码错误的问题,解决问题需要进行合理推断,找出问题可能出现的位置,并进行修改。tomcat默认java文件编码为系统编码,比如我电脑系统自带编码就是GBK,而iso编码则是tomcat传递字符串信息时的默认编码,需要注意不同编码错误的处理方式。

图1 junit测试环境下的结果
图 2 Tomcat部署后的结果
图3 tomcat conf内配置server,xml
图4 catalina.bat文件所在位置
图5 在catalina.bat文件中添加-Dfile.encoding=UTF-8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值