簡體   English   中英

讀取屬性文件時是否需要檢查編碼方案?

[英]Do we need to check the encoding scheme when reading properties file?

今天,我的一名測試人員來找我,說我的程序未通過她的測試。

她所做的實際上只是打開我所有的屬性文件,並將它們另存為Unicode格式。

問題:

  1. 是否有行業慣例來檢查每種屬性文件的編碼類型?
  2. 您如何處理這個問題?

我之前從未見過任何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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM