0
在Java中創建Properties類時,它要求輸入流必須在ISO-8859-1中進行編碼。但實際上,我使用UTF-8通過native2ascii工具而不是ISO-8859-1轉換非拉丁文屬性文件。爲什麼UTF-8作爲native2ascii編碼選項而不是ISO-8859-1?
- 根據JDK doc,輸入流應該被編碼爲ISO-8859-1。 也就是說,源文件在ISO-8859-1中進行編碼。
- 根據解碼和編碼應該使用相同的ISO-8859-1, Java中的屬性類應該使用ISO-8859-1進行解碼。
- 根據測試,實際上我們使用UTF-8作爲native2ascii中的編碼 選項而不是ISO-8859-1。爲什麼?
測試如下:
- 創建test.properties文件,其中包含: 「鍵= U」
生成ISO-8859-1屬性文件:鍵= \ u00c3 \ u009c
native2ascii -encoding ISO-8859-1 test.properties iso88591.propertie:
生成UTF-8屬性文件:鍵= \ u00dc
native2ascii -encoding UTF-8 test.properties utf8.properties
創建屬性加載兩個生成的屬性文件:
Properties p = new Properties(); //InputStream inStream = new FileInputStream("src/test/java/com/active/translation/iso88591.properties"); InputStream inStream = new FileInputStream("src/test/java/com/active/translation/utf8.properties"); p.load(inStream); System.out.println(p.getProperty("key"));
iso88591.propertie結果是:A
- utf8.properties結果是:U
答:
-encoding需要與源文件中使用的實際編碼相匹配。從外觀來看,這就是UTF-8。 - Thilo Apr 3 at 2:52
_「根據JDK doc」,具體是哪個JDK文檔? –
'-encoding'需要匹配源文件中使用的實際編碼。從外觀來看,這就是UTF-8。 – Thilo
在UNICODE中,字符是U + 00DC。在UTF-8編碼中,它將是0xC39C。當使用ISO-8859-1編碼讀取該文件時,它將UTF-8編碼字符讀取爲兩個ISO-8859-1編碼字符:0xC3 0x09c。按照Thilo的建議,使--encoding參數與文件的實際編碼匹配。 –