【问题标题】:Confusion about java native2ascii tool关于 java native2ascii 工具的困惑
【发布时间】:2013-08-27 12:17:38
【问题描述】:

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

用本地编码的字符转换一个文件(这些字符是 非拉丁语 1 和非 Unicode)与使用 Unicode 编码的字符合二为一。

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

Latin 1 (iso 8859-1) 表在此处可用,例如 http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout

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

澄清我的问题:

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

【问题讨论】:

    标签: java internationalization localizable.strings


    【解决方案1】:

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

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

    【讨论】:

    • 是的,但我无法提供阅读器,我必须使用默认阅读器。这意味着我不能直接在文件中键入 é。我必须放 \uxxxx 并使用例如 maven 在生成产品时使用 native2ascii
    • 我的进一步问题是:为什么 native2ascii 不应该转换 latin1 字符(基于工具描述)。文档有误吗?
    • 我也认为文档是错误的,他们应该说非 ASCII 字符,但请注意,Properties.load(InputStream) 确实读取文件,假设它是 ISO88591,所以它应该读取 ISO88591 道具文件没有 \ uxxxx
    • 更改您的回答以反映文档已过时,我会接受您的回答
    【解决方案2】:

    混淆的根源可能是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.htmlhttps://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)编码字符的属性文件仍然有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2019-05-17
      • 2020-03-06
      • 2016-03-16
      • 2013-07-27
      • 1970-01-01
      • 2012-09-20
      相关资源
      最近更新 更多