2013-04-03 21 views
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

+2

_「根據JDK doc」,具體是哪個JDK文檔? –

+1

'-encoding'需要匹配源文件中使用的實際編碼。從外觀來看,這就是UTF-8。 – Thilo

+1

在UNICODE中,字符是U + 00DC。在UTF-8編碼中,它將是0xC39C。當使用ISO-8859-1編碼讀取該文件時,它將UTF-8編碼字符讀取爲兩個ISO-8859-1編碼字符:0xC3 0x09c。按照Thilo的建議,使--encoding參數與文件的實際編碼匹配。 –

回答

0

-encoding需要匹配源文件中使用的實際編碼。從外觀來看,這就是UTF-8。 - Thilo Apr 3 at 2:52

相關問題