0

在 Java 中创建 Properties 类时,要求输入流必须以 ISO-8859-1 编码。但在实践中,我使用 UTF-8 通过 native2ascii 工具而不是 ISO-8859-1 转换非拉丁属性文件。

  • 根据 JDK 文档,输入流应编码为 ISO-8859-1。也就是说,源文件采用 ISO-8859-1 编码。
  • 根据解码和编码应该使用相同的 ISO-8859-1,Java 中的 Properties 类应该使用 ISO-8859-1 解码。
  • 根据测试,实际上我们在 native2ascii 中使用 UTF-8 作为编码选项,而不是 ISO-8859-1。为什么?

测试如下:

  • 创建 test.properties 文件,其中包含:“key=Ü”
  • 生成的 ISO-8859-1 属性文件:key=\u00c3\u009c

      native2ascii -encoding ISO-8859-1 test.properties iso88591.propertie: 
    
  • 生成的 UTF-8 属性文件:key=\u00dc

      native2ascii -encoding UTF-8 test.properties utf8.properties 
    
  • 创建 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 结果是:Ã

  • utf8.properties 结果为:Ü

回答:

该 -encoding 需要与源文件中使用的实际编码相匹配。从外观上看,那是UTF-8。– 蒂洛 4 月 3 日 2:52

4

1 回答 1

0

该 -encoding 需要与源文件中使用的实际编码相匹配。从外观上看,那是UTF-8。– 蒂洛 4 月 3 日 2:52

于 2013-04-09T01:44:01.743 回答