今天我的一位測試人員來找我說我的程序未通過測試。讀取屬性文件時,我們是否需要檢查編碼方案?
她所做的一切實際上是打開我所有的屬性文件並將它們保存爲Unicode格式。
問題:
- 是否有行業慣例檢查每一個屬性文件的編碼類型?
- 你如何處理這個問題?
我從來沒有見過任何java項目正在運行編碼檢查屬性文件之前。但我看到她的觀點,因爲客戶可能會以不同的編碼類型保存屬性文件。
今天我的一位測試人員來找我說我的程序未通過測試。讀取屬性文件時,我們是否需要檢查編碼方案?
她所做的一切實際上是打開我所有的屬性文件並將它們保存爲Unicode格式。
問題:
我從來沒有見過任何java項目正在運行編碼檢查屬性文件之前。但我看到她的觀點,因爲客戶可能會以不同的編碼類型保存屬性文件。
屬性文件是否被視爲應用程序的一部分或用戶可編輯文件的一部分。在第一種情況下,我不認爲對應用程序的某些部分進行編碼或存儲的假設是錯誤的。
如果屬性文件是以用戶爲目標的用戶可編輯文件,那麼這個原則適用:您應該驗證並清除從應用程序外部進入的所有輸入。
官方java.util.Properties
文檔聲明編碼在ISO-8859-1
。
將屬性保存到流中或從流中加載它們時,將使用ISO 8859-1字符 編碼。對於在此編碼中不能直接表示的字符,使用 Unicode轉義符;然而,在轉義 序列中只允許一個'u'字符。 native2ascii工具可用於將屬性文件轉換爲其他 字符編碼。
這可以是found here。
儘管該規範允許在屬性文件中使用Latin-1,但通常的做法是ASCII。
所有其他字符集需要轉換爲ASCII使用native2ascii
是安全的。
當我們開始使用本地編碼時,我們遇到了相同的問題,其中一些使用了Latin-1,另一些使用UTF-8編碼,並且它們不兼容。所以留在ASCII。
正如其他人所說,使用流讀取的屬性文件的編碼固定在ISO-8859-1。你不能真正地驗證這個非常容易 - 儘管檢查文件是否以UTF-8字節順序標記開頭並不是一個壞主意。
從Java 6開始,您可以將Reader
提供給Properties.load,而不是Stream
。如果它仍然是一個選項,你可能可能想要開始使用它和授權 UTF-8,這是很多人使用比ISO-8859-1和\uxxxx
轉義更容易。
使用native2ascii java實用程序讓您的屬性文件處於正確的狀態。
我的問題是,我的用戶可能會篡改屬性文件並將其保存爲其他編碼格式。我們是否需要爲此進行檢查? – janetsmith 2009-09-23 05:22:44
我認爲你必須假設要編輯屬性文件的用戶有意識將其保存在正確的編碼中。只有這麼多你可以做,以保護用戶免受他們不明白的東西搞亂的結果... – 2009-09-23 06:44:27
我已經添加了一些上面關於用戶可編輯文件的答案,以及屬性文件的意圖。 – Stef 2009-09-23 14:57:23