[英]Do we need to check the encoding scheme when reading properties file?
今天,我的一名測試人員來找我,說我的程序未通過她的測試。
她所做的實際上只是打開我所有的屬性文件,並將它們另存為Unicode格式。
問題:
我之前從未見過任何Java項目在屬性文件上運行編碼檢查。 但我明白她的意思,因為客戶可能會將屬性文件保存為其他編碼類型。
是將屬性文件視為應用程序的一部分,還是用戶可編輯文件的一部分? 在第一種情況下,我認為對應用程序的各個部分如何編碼或存儲進行假設是不對的。
如果將屬性文件作為用戶可編輯的文件作為目標用戶,則該原則適用:您應該驗證並清除來自應用程序外部的所有輸入。
官方的java.util.Properties
文檔聲明該編碼在ISO-8859-1
。
將屬性保存到流中或從流中加載屬性時,將使用ISO 8859-1字符編碼。 對於無法直接用此編碼表示的字符,將使用Unicode轉義。 但是,轉義序列中僅允許使用一個'u'字符。 native2ascii工具可用於在其他字符編碼之間來回轉換屬性文件。
可以在這里找到 。
即使規范允許在屬性文件中使用Latin-1,通常的做法是ASCII。
為了安全起見,所有其他字符集都需要使用native2ascii
轉換為ASCII。
當我們開始使用本機編碼時,我們遇到了相同的問題,有些使用Latin-1,有些使用UTF-8,並且它們不兼容。 因此,請保留ASCII碼。
正如其他人所說,使用流讀取的屬性文件的編碼固定為ISO-8859-1。 您真的不能如此輕松地進行驗證-盡管檢查文件是否以UTF-8字節順序標記開頭並不是一個壞主意。
從Java 6開始,您可以為Properties.load提供Reader
而不是Stream
。 如果它仍然是一種選擇,你可能要開始使用和任務 UTF-8,這將是對許多人來說不是ISO-8859-1和使用的方便很多赫克\\uxxxx
逃逸。
使用native2ascii java實用程序將屬性文件置於正確的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.