前言
不知不覺已經(jīng)入java坑1年半了,看著大牛們的技術(shù)博客肤视,對于自己喜歡的東西一直都只有在Evernote上記筆記的習(xí)慣档痪,好像不是很喜歡寫出來分享給大家。今天看到這個(gè)問題邢滑,好幾次遇見了腐螟,卻一直沒有梳理±Ш螅可能下次遇見這個(gè)問題乐纸,還是會google別人的文章,想想還是自己寫下現(xiàn)在的問題和解決思路吧摇予。
問題
用IDEA, 在跑JavaWeb服務(wù)測試時(shí), 發(fā)現(xiàn)一個(gè)很奇怪的問題, 遠(yuǎn)程調(diào)用對方接口的時(shí)候, 傳入的中文參數(shù)進(jìn)入對方的數(shù)據(jù)庫的時(shí)候會亂碼汽绢。
解決之路
再三確定對方工程師自己接口字符格式和數(shù)據(jù)庫格式是否一致時(shí),對方確認(rèn)說都是Utf-8侧戴∧眩基于程序員之間的不信任,討取對方接受數(shù)據(jù)的代碼酗宋,查看代碼格式积仗,發(fā)現(xiàn)的確是這樣。于是開始檢測自己的HTTP的POST調(diào)用是否設(shè)置錯(cuò)誤編碼格式蜕猫,發(fā)現(xiàn)使用Utf-8寂曹,用static main方法直接測試對方接口,得到結(jié)果是中文入庫不亂碼了回右。然后啟動Tomcat運(yùn)行稀颁,繼續(xù)測試發(fā)現(xiàn)同樣的參數(shù)還是亂碼。推測可能是Tomcat服務(wù)器的編碼格式不對會導(dǎo)致這個(gè)中文亂碼楣黍,google發(fā)現(xiàn)需要在Tomcat的conf下的server.xml中Connector標(biāo)簽中加入URIEncoding="UTF-8"
匾灶。重啟服務(wù)后調(diào)用接口發(fā)現(xiàn)仍是中文亂碼。沒有辦法獨(dú)立解決租漂,于是將這個(gè)問題和同組人員討論阶女,有個(gè)人認(rèn)為不可能不信邪于是從git上download下代碼跑了一遍颊糜,發(fā)現(xiàn)中文入庫也不亂碼了。
當(dāng)時(shí)覺得不可思議秃踩,自己再跑一遍發(fā)現(xiàn)還是亂碼衬鱼,在百思不得其解之中,前輩發(fā)話了憔杨,應(yīng)該是你的IDE有問題鸟赫,和同事一比較發(fā)現(xiàn)的確用了不一樣的IDE。于是上網(wǎng)google消别,發(fā)現(xiàn)了一片文章抛蚤,標(biāo)題就是IntelliJ IDEA運(yùn)行tomcat項(xiàng)目編碼錯(cuò)誤, 及如何指定tomcat編碼。上面講了如何處理這個(gè)問題寻狂。
解決方案
Run/Debug Configuration -> Tomcat Server -> Tomcat 7, 在VM Options里面加上 -Dfile.encoding=UTF-8 并應(yīng)用
以上更改后, 控制臺輸出會亂碼, 還需要將IDEA的啟動環(huán)境也配成UTF-8, 在IDEA安裝目錄下, 打開 idea64.exe.vmoptions , 最后一行加上 -Dfile.encoding=UTF-8岁经。
總結(jié)
對于吃飯的IDE還是要多多了解啊,工欲善其事蛇券,必先利其器缀壤。