关于java native2ascii工具的困惑

时间:2013-08-27 12:17:39

标签: java internationalization localizable.strings

关于java native2ascii工具的一点混淆。 tool in Java 6的定义:

  

转换具有本机编码字符的文件(字符为   非拉丁语1 和非Unicode)与具有Unicode编码字符的语言。

那为什么它还将属于Latin 1表(如é)的字符转换为unicode编码表示(\ u00e9)???

拉丁语1(iso 8859-1)表格可在此处获取,例如http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout

这意味着我不能直接使用某些欧洲语言的属性文件,例如法语。

澄清我的问题:

  

native2ascii不应该转换latin1字符(根据其描述)。 é是一个有效的拉丁文字符。那为什么要转换呢?

2 个答案:

答案 0 :(得分:0)

您可以使用包含法语和其他字符的属性文件。属性接受\uxxxx个序列。您可以直接使用国家字符,因为属性有加载(Reader reader)方法。然后文件可以是任何编码,您将提供正确解码文件的阅读器,例如new InputStreamReader(new FileInputStream(1.properities), Charset.forName("ISO-8859-1"));

我也同意native2ascii不应该转换é,因为它是一个合法的latin-1字符,文档说latin-1字符不会被转换。

答案 1 :(得分:0)

混淆的根源可能是文档随Java版本7而改变。

在Java 6中,solaris和unix(http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/native2ascii.html)的文档说:" Java编译器和其他Java工具只能处理包含Latin-1和/或Unicode编码的文件(\ udddd)符号)字符。 native2ascii将包含其他字符编码的文件转换为包含Latin-1和/或Unicode编码字符的文件。"

我认为这显然意味着输出是Latin-1,而不是Latin-1的字符将在输出中进行Unicode编码。

我在Ubuntu上检查了Openjdk 6,而native2ascii不符合文档,它将Latin-1字符输出为Unicode编码。因此,在这种情况下,文档或native2ascii工具可能被视为不正确。

但是在Java 7和Java 8中,文档(http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/native2ascii.html https://docs.oracle.com/javase/8/docs/technotes/tools/unix/native2ascii.html)说:" native2ascii将编码的文件转换为Java运行时环境支持的任何字符编码以ASCII编码的文件,对所有不属于ASCII字符集的字符使用Unicode转义符(" \ uxxxx"表示法)。"

我在Ubuntu上检查了Openjdk 8 native2ascii并发现它可以正常工作,它将Latin-1字符转换为Unicode编码。

请注意,7/8文档也提及"包含不在ISO-8859-1字符集中的字符的属性文件需要此过程。"

我认为这显然意味着包含Latin-1(又名ISO-8859-1)编码字符的属性文件仍然有效。