1. 程式人生 > >freemaker.charset與project\file-encoding編碼問題

freemaker.charset與project\file-encoding編碼問題

1、問題背景:
接手新專案,專案框架為spring-boot+freemaker,Gradle管理

2、部署過程

觀察到application.properties檔案中有該設定

spring.freemaker.charset =  GBK

因此認為專案編碼為GBK

使用Gradle匯入,沒有更改任何Eclipse的編碼配置

(PS:使用Intelli 匯入eclipse專案 不能自動下載jar包,因此還是用eclipse比較方便)

3、問題出現:

Web頁面上中文 部分正常顯示,部分亂碼,一般是從伺服器後臺傳值給freeemaker html的值為亂碼。chrome上的charset擴充套件程式顯示頁面編碼為GBK。

檢視亂碼來源的.java檔案發現在IDE中也顯示為亂碼,右鍵單擊檔案properties->Text file encoding ->取消default(GBK),選擇other(UTF-8),IDE中程式檔案中的中文顯示恢復正常。重新Run,Web頁面仍然顯示亂碼。

這是必然的,程式檔案採用UTF-8編碼,可是解析出來的前端模板採用GBK,兩者不一致,肯定是亂碼。

4、問題解決:
從workspace中刪除專案,設定Window->Preferences->Content Types->Text->Java Source File->Default encoding 填入UTF-8,這樣保證編譯環節.java中的中文能正確解析

WorkSpace中的Text file encoding仍然保留為預設的GBK,這個預設GBK不會影響上一步中設定的JavaSourceFile的text file encoing 為UTF-8,還能保證freemaker生成的GBK hmtl檔案能正確解析。如果這個也設定成了UTF-8,那麼在單個檔案的個性化text file encoding設定那裡other 中會沒有GBK的選項,只有UTF-8等其他非eclipse預設的編碼型別。

值得注意的是,request請求仍是utf-8的

 res.setHeader("content-type", "application/octet-stream;charset=UTF-8");

每個檔案可以通過properties設定單獨的編碼格式。

5、總結

spring.freemaker.charset=GBK 設定的是頁面渲染模板檔案的編碼型別,其實官網上都建議設定成為UTF-8,反正最好與Java Source File的text file encoding 保持一致,這樣才能避免在專案匯入IDE時對不同型別檔案的多重編碼格式設定。比如這次我因為同事之前設定了GBK和UTF-8 兩種格式的原因,就要在接手專案的時候針對templates html檔案 和java source file檔案設定兩種不同的編碼格式,不設定的話,IDE採用預設的統一編碼GBK在IDE中展示專案檔案,.java中的中文是亂碼,這樣不僅開發人員看不懂,也導致Web頁面亂碼。如果我將專案檔案都設定成UTF-8,那麼只有.html檔案在IDE中展示中文亂碼,Web頁面仍是正常的,因為freemaker的charset是GBK,生成的html是GBK,解析的時候也是GBK