【问题标题】:Unrecognized special characters in EclipseEclipse 中无法识别的特殊字符
【发布时间】:2012-03-28 19:22:13
【问题描述】:

我在 Eclipse (Indigo Service Release 1) 中有一个编码问题。 以下是发生的事情:

我有一个德语属性文件(语言包),当我在Eclipse 中打开它时,它没有正确显示。例如:gelöscht 显示为gel�scht。我尝试将文件关联更改为Text EditorProperties File EditorJBoss Tools Properties Editor,但在所有情况下都显示为这样。

有趣的是,当我在Notepad++ 中打开文件时,它会正确显示。 在Eclipse中,文本文件编码设置为UTF-8,文件的编码(根据Notepad++)为ANSI。

还有其他我不知道的设置吗?如何解决此问题以在Eclipse 中查看正确的编码?

【问题讨论】:

  • 请注意,Java 中的.properties 文件必须以 ISO-8859-1 编码,而不能 UTF-8。这是 Java 中比较奇怪/不一致的决定之一。
  • @JoachimSauer:嗯,这取决于要阅读它们的内容。 Spring早就支持其他编码了,现在可以将任意Reader传入Properties.load
  • @JonSkeet:当然可以,但是有很多基础设施实际上并没有使用该功能。 save 赌注是使用默认编码(和/或对所有非 ASCII 字符使用 unicode 转义)。
  • @JoachimSauer:默认编码是一个糟糕的选择,IMO - 谁说你的机器的默认编码和我的机器一样?您应该绝对使用固定的、明确指定的编码 - 应该是 ASCII-with-Unicode-escapes 或 UTF-8 IMO。
  • @JonSkeet:我一直不清楚:我的意思是“Properties.load(InputStream) 定义的 .properties 文件的默认编码恰好是 ISO-8859-1”。是的,使用平台默认编码是个糟糕的主意。

标签: java eclipse encoding resourcebundle


【解决方案1】:

文本文件不携带编码信息,因此您看到的只是最好的猜测。 Notepad++ 只是猜测文件是 ANSI。

有问题的文件不是 UTF8(或者至少在上次有人编辑它时没有以这种方式保存)。您必须将文件重新保存为 UTF8 或将 Eclipse 中的编码更改为类似 CP1252 的编码。

自动识别正确的格式是不可能的。

【讨论】:

    【解决方案2】:

    你如何阅读属性文件?以 ISO-8859-1(各种基础设施所期望的默认编码)或 UTF-8 以外的任何非 ASCII 编码存储它们对我来说听起来是个坏主意。我强烈建议您坚持使用 ASCII、ISO-8859-1 或 UTF-8。

    如今,您可以使用任何 Reader 加载 Properties,但 UTF-8 通常是最适合用于需要处理非 ASCII 字符并在任何机器上工作的文件的编码。

    您可以可能强制 Eclipse 将其视为使用差异编码,方法是右键单击文件,选择属性,然后选择底部的“文本文件编码”资源页面 - 但我建议您不要这样做。

    另一种方法是使用带有适当\u.... 转义序列的ASCII,由native2ascii 生成。

    (虽然您可以包含非 ASCII ISO-8859-1 字符,但我个人不会 - 当字符不是 ASCII 时很明显,但 ISO-8859-1 和其他编码更难用肉眼发现。)

    【讨论】:

    • 在应用程序中,值显示正确。我只有在 Eclipse 中查看文件时才会遇到问题。当我更改该属性文件中的值时,我也遇到了问题,因为所有特殊字符都将显示不正确。我使用 Turbine 作为应用程序框架,据我所知,它使用 ResourceBundle java 类来读取属性文件值。我的属性文件是用 ANSI 编码的(根据 Notepad++),但是我在 Eclipse 中指定了 UTF-8,所以我不知道它为什么会改变。
    • @Atticus:在应用程序中读取的文件如何?此外,您不应该只相信 Notepad++ - 至少在某种程度上它会猜测。您需要了解文本文件只是一堆字节,以特定的编码被解释
    • 在应用程序中,文件正在被 java.util.ResourceBundle.getString(String) 方法读取。
    • @Atticus:好的,所以在这种情况下,您必须使用 ISO-8859-1 或 Unicode 转义。 (我会敦促 Unicode 转义,以避免这成为一个问题。)您可能需要考虑使用您想要的任何编码的“主”属性文件,然后运行 ​​native2ascii 作为构建的一部分。
    • 但奇怪的问题是我在应用程序中显示字符没有问题(除非我更改了属性文件中的某些内容)。我认为我的问题是我的 Eclipse 尝试打开属性文件,就好像它们是 UTF-8 编码一样,但实际上它们是 ANSII,因此特殊字符在 Eclipse 中显示不正确。我认为是这种情况,因为我尝试在简单的记事本中打开文件,您可以在其中指定编码,并且它适用于 ANSII,并且在以 UTF-8 格式打开时会出现与 eclispe 中相同的错误。你怎么看?
    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2021-08-13
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多