idea Transparent-native-to-ascii 是否需要勾選?
首先看一下官方對該選項的解釋:
第一段是說標準的Java api是用ISO 8859-1
編碼.properties
文件的,所以如果你在properties文件中可以使用轉義序列表示沒在這個編碼中定義的字符。或者,你可以在項目級別定義properties的默認編碼方式,不使用java默認的api編碼方式讀取properties文件而使用自己定義的編碼方式。
第二段是說將那些沒有在ISO 8859-1
中定義的字符使用轉義字符替代。(透明的將本地字符轉換成ascii碼進轉義)
首先需要了解的是,將文件保存到磁盤需要編碼
過程,將文件讀取到程序中需要解碼
過程,假設我們使用utf-8格式保存文件,如果不勾選Transparent-native-to-ascii
,表示自己的properties文件中的一些特殊字符(比如中文,a=中文)在被java api默認的方式加載時(properties.load(fis)),可能會亂碼,因為默認是使用ISO 8859-1
解碼,該編碼方式是無法解碼中文的。此時有兩種解決方案,可以保證自己獲取到的屬性值不是亂碼:
- 勾選
Transparent-native-to-ascii
,idea會默認將輸入的特殊字符進行轉義,每個特殊字符都是用\uxxxx
表示,此時再被ISO 8859-1
讀取時就會通過轉義獲取到字符真正的含義,雖然被轉義了,但是我們在idea裏面看到的還是我們認識的字符而不是\uxxxx
,這是idea自動完成的工作(即transparent 對用戶透明) - 繼續不勾選,在加載properties文件時,使用自己定義的編碼方式加載,比如utf-8,此時java api可以這樣寫
properties.load(new FileReader("gbk.properties", StandardCharsets.UTF_8))
,此時idea沒有對特殊字符進行轉義,但是自己讀取的時候指定了和編碼的時候同樣的編碼方式utf-8,所以對於特殊字符也不會讀錯
如果勾選了,又使用了寫時的編碼讀取了,特殊字符也不會讀錯,不管什麼編碼方式,在讀取轉義字符時都不會讀錯,因為使用轉義字符可以表示世界上任何一個字符(unicode編碼)
總結:
- 一般使用中文值的時候,在讀取配置文件時一定要按寫入的編碼方式讀取(一般都是utf8),避免編碼問題造成亂碼,此時勾不勾選都無所謂
- 如果是團隊協作,一個人勾選了,保存了properties文件,別人在獲取到這個properties文件時如果自己沒有勾選中文都會顯示轉義編碼
\uxxxx
(idea沒有透明處理)。如果是勾選的人獲取到沒有勾選的人寫的properties文件,顯示沒有什麼問題,之後如果再進行保存的話,後續沒有勾選的人獲取到還會是\uxxxx
。所以如果勾選,團隊協作時最好都要勾選。
注意:如果勾選了,在將該文件放在linux系統上的時候,中文都會顯示\uxxxx
,因為idea幫你透明的處理的轉義字符,linux不會,所以為了在linux上保證中文不亂碼,我選擇不勾選,並且在使用配置文件時,使用指定編碼進行讀取保證不亂碼。