前言
不知不觉已经入java坑1年半了,看着大牛们的技术博客,对于自己喜欢的东西一直都只有在Evernote上记笔记的习惯,好像不是很喜欢写出来分享给大家。今天看到这个问题,好几次遇见了,却一直没有梳理。可能下次遇见这个问题,还是会google别人的文章,想想还是自己写下现在的问题和解决思路吧。
问题
用IDEA, 在跑JavaWeb服务测试时, 发现一个很奇怪的问题, 远程调用对方接口的时候, 传入的中文参数进入对方的数据库的时候会乱码。
解决之路
再三确定对方工程师自己接口字符格式和数据库格式是否一致时,对方确认说都是Utf-8。基于程序员之间的不信任,讨取对方接受数据的代码,查看代码格式,发现的确是这样。于是开始检测自己的HTTP的POST调用是否设置错误编码格式,发现使用Utf-8,用static main方法直接测试对方接口,得到结果是中文入库不乱码了。然后启动Tomcat运行,继续测试发现同样的参数还是乱码。推测可能是Tomcat服务器的编码格式不对会导致这个中文乱码,google发现需要在Tomcat的conf下的server.xml中Connector标签中加入URIEncoding="UTF-8"
。重启服务后调用接口发现仍是中文乱码。没有办法独立解决,于是将这个问题和同组人员讨论,有个人认为不可能不信邪于是从git上download下代码跑了一遍,发现中文入库也不乱码了。
当时觉得不可思议,自己再跑一遍发现还是乱码,在百思不得其解之中,前辈发话了,应该是你的IDE有问题,和同事一比较发现的确用了不一样的IDE。于是上网google,发现了一片文章,标题就是IntelliJ IDEA运行tomcat项目编码错误, 及如何指定tomcat编码。上面讲了如何处理这个问题。
解决方案
Run/Debug Configuration -> Tomcat Server -> Tomcat 7, 在VM Options里面加上 -Dfile.encoding=UTF-8 并应用
以上更改后, 控制台输出会乱码, 还需要将IDEA的启动环境也配成UTF-8, 在IDEA安装目录下, 打开 idea64.exe.vmoptions , 最后一行加上 -Dfile.encoding=UTF-8。
总结
对于吃饭的IDE还是要多多了解啊,工欲善其事,必先利其器。