2013-08-27 50 views
1

有关java native2ascii工具的一点疑惑。为tool in Java 6定义:关于java native2ascii工具的困惑

一个文件转换与天然编码的字符(字符,这是 非拉丁1和非Unicode),以一个与Unicode编码的字符。

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

拉丁语1(ISO 8859-1)表可在这里例如http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout

这意味着,我不能直接与属性文件的一些欧洲语言,如法语工作。

为了澄清我的问题:

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

回答

0

可以处理其属性文件与法国和其他字符。属性接受\uxxxx序列。您可以直接使用国家字符,因为属性已经加载(读取器读取器)方法。然后,该文件可以在任何编码,您将提供该文件正确解码阅读器,如new InputStreamReader(new FileInputStream(1.properities), Charset.forName("ISO-8859-1"));

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

+0

是的,但我不能提供一个读者,我必须使用默认的。这意味着我不能直接在文件中输入é。我必须把\ uxxxx和使用例如maven使用native2ascii,而生成产品 – Kemoda

+0

进一步我的问题是:为什么native2ascii转换拉丁文字符时,它不应该(基于工具描述)。文档是否错误? – Kemoda

+0

我也认为文档是错误的,他们应该说非ASCII字符,但请注意,Properties.load(InputStream)真的读取文件,假设它是ISO88591,所以它应该读取ISO88591道具文件确定没有\ uxxxx –

0

混乱的根源可能是文档与Java版本改变7.

在Java 6 Solaris和UNIX(http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/native2ascii.html)的文件说:“Java编译器和其它Java工具只能处理文件,这包含拉丁-1和/或Unicode编码(\ udddd表示)字符。native2ascii的转换,其含有其它字符编码到文件中含有的Latin-1和/或Unicode编码charaters文件。

我认为它清楚地意味着输出是Latin-1,而不在Latin-1中的字符将在输出中进行Unicode编码。

我检查的OpenJDK 6上Ubuntu和有不符合的文件用native2ascii,它输出Latin-1字符为Unicode编码。所以在这种情况下,文档或native2ascii工具都可能被认为是不正确的。

但是在Java中7和Java 8文档(http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/native2ascii.htmlhttps://docs.oracle.com/javase/8/docs/technotes/tools/unix/native2ascii.html)说:“native2ascii的转换被编码到由Java运行时环境支持以ASCII编码的文件中的任何字符编码文件,使用Unicode转义字符(”所有不属于ASCII字符集的字符

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

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

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