问题特征: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传递字符串信息时的默认编码,需要注意不同编码错误的处理方式。