在 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