Java 为什么UTF-8作为Native2ASCI编码选项而不是ISO-8859-1?

Java 为什么UTF-8作为Native2ASCI编码选项而不是ISO-8859-1?,java,Java,在Java中创建Properties类时,它要求输入流必须用ISO-8859-1编码。但在实践中,我使用UTF-8通过native2ascii工具而不是ISO-8859-1转换非拉丁属性文件 根据JDK文档,输入流应编码为ISO-8859-1。 也就是说,源文件以ISO-8859-1编码 根据解码和编码应使用相同的ISO-8859-1, Java中的属性类应使用ISO-8859-1进行解码 根据测试,实际上我们使用UTF-8作为编码 Native2ASCI中的选项,而不是ISO-8859-1。

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

  • 根据JDK文档,输入流应编码为ISO-8859-1。 也就是说,源文件以ISO-8859-1编码
  • 根据解码和编码应使用相同的ISO-8859-1, Java中的属性类应使用ISO-8859-1进行解码
  • 根据测试,实际上我们使用UTF-8作为编码 Native2ASCI中的选项,而不是ISO-8859-1。为什么?
测试如下:

  • 创建包含“key=Ü”的test.properties文件
  • 生成的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 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.属性结果为:Ã

  • utf8.结果为:Ü
答复:


这种编码需要与源文件中使用的实际编码相匹配。从外观上看,这就是UTF-8Thilo Apr 3在2:52时-编码需要与源文件中使用的实际编码匹配。从外观上看,这就是UTF-8Thilo Apr 3 2:52

“根据JDK文档”,具体是哪个JDK文档?
-编码
需要与源文件中使用的实际编码匹配。从外观上看,这是UTF-8。在UNICODE中,该字符是U+00DC。在UTF-8编码中,它将是0xC39C。当使用ISO-8859-1编码读取该文件时,它将UTF-8编码字符读取为两个ISO-8859-1编码字符:0xC3 0x09c。正如Thilo所建议的,使--encoding参数与文件的实际编码匹配。JDK doc:。“除了输入/输出流采用ISO 8859-1字符编码外”,正如Thilo所建议的那样,-编码选项是源文件的实际编码。使用“ISO-8859-1”编码保存test.properties时,则iso88591.propertie:key=\u00dc和通过getProperty(“key”)的值是正确的Native2ASCI-编码ISO-8859-1测试。属性iso88591。属性'