搞事的中文

有多個項目在跑,最開始的時候所有項目都是正常的,終于有一天,新建了一個新的項目,這個項目里通過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ā)誓,以后這種中文硬編碼一定要抽到配置文件!!

當然問題還沒有最終解決,還沒找到根本原因

查了很多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。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容