有多個項目在跑,最開始的時候所有項目都是正常的补君,終于有一天,新建了一個新的項目昧互,這個項目里通過httpclient發(fā)出去的中文都是亂碼的挽铁。于是開始了為期不知道多久的排查。
本地開發(fā)都是好的敞掘,打包發(fā)上服務器就不正常了--叽掘!
httpClient發(fā)送亂碼,應該跟發(fā)送前的編碼設置有關吧玖雁?
ContentType.APPLICATION_JSON
這個類的配置采用的就是UTF-8更扁,這樣子應該沒啥問題了吧。
StringEntity stringEntity = new StringEntity(body, ContentType.APPLICATION_JSON);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json; charset=UTF-8");
httpPost.setHeader("Accept-Encoding", "gzip");
httpPost.setEntity(stringEntity);
然而還是亂碼...
這要怎么搞?會不會是中文在類加載的時候就已經(jīng)是亂碼了呢疯潭?
于是我把項目重新改了一遍過赊堪,全改成UTF-8編碼
編譯和啟動的時候時候都加上了-Dfile.encoding=UTF-8
參數(shù)面殖,然后
curl "http://localhost:8080/env`查了也是`"file.encoding":"UTF-8"
這樣應該沒啥問題了吧竖哩?
還是亂碼...
后來老大說了句硬編碼什么的,意識到脊僚,可能把所有中文抽出來應該會好
因為抽出來的配置文件可以直接查看文件編碼屬性之類的相叁。
然后刷刷刷把中文抽到配置文件,啟動的時候讀取文件里面的內(nèi)容辽幌,果然增淹,這下好了。
我暗暗發(fā)誓乌企,以后這種中文硬編碼一定要抽到配置文件B侨蟆!
當然問題還沒有最終解決加酵,還沒找到根本原因
查了很多gradle項目亂碼的資料拳喻,主要的思路就是源文件必須是UTF-8格式,編碼之后也必須是UTF-8
猪腕。
- 把這個目錄下的encoding改成UTF-8
eclise:windows->preference->General->Workspace
eclise:windows->preference->General->Content Types - 重新導入項目
- gradle.build加入編譯編碼設置
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
然而...完全不想說話
一段時間之后冗澈,偶然發(fā)現(xiàn),啟動項目(main所在的jar)上的中文編碼沒亂碼陋葡,但是其他子項目(jar)上的中文亂碼亚亲!這就奇怪了啊,但也許問題的出路就在這里腐缤!我試著單獨把每個子項目的編譯參數(shù)后都加上-Dfile.encoding=UTF-8
捌归,但依然還是這個問題。
最后一招岭粤,在gradle.build上作文章:
allprojects {
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
}
然后惜索,好了!
好想哭啊绍在,傻逼了门扇!
但總結出來的思路確實就是源文件必須是UTF-8格式,編碼之后也必須是UTF-8
偿渡。