2

关于 java native2ascii 工具的一些困惑。Java 6中工具的定义:

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

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

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

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

为了澄清我的问题:

native2ascii 不应转换 latin1 字符(根据其描述)。é 是有效的 latin1 字符。因此为什么要转换?

4

2 回答 2

1

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

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

于 2013-08-27T12:24:56.263 回答
1

造成混淆的原因可能是文档随 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 编码的文件,对所有文件使用 Unicode 转义符(“\uxxxx”表示法)不属于 ASCII 字符集的字符。 "

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

请注意,7/8 文档还提到“对于包含不在 ISO-8859-1 字符集中的字符的属性文件,此过程是必需的。”

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

于 2016-03-23T09:05:29.287 回答