Eclipse错误的Java属性UTF-8编码

BuZ*_*dEE 25 java eclipse utf-8 properties-file

我有一个JavaEE项目,我在其中使用消息属性文件.这些文件的编码设置为UTF-8.在文件我用的是德国的变音似ä,ö,ü.问题是,有时这些字符会被unicode替换\uFFFD\uFFFD,但不会替换为每个字符.现在,我有一个案例,其中äü都被替换\uFFFD\uFFFD,但不是每个发生äü.

Git diff给我看了这样的事情:

 mail.adresses=E-Mail hinzufügen:
-mail.adresses.multiple=E-Mails durch Kommata getrennt hinzufügen.
+mail.adresses.multiple=E-Mails durch Kommata getrennt hinzuf\uFFFD\uFFFDgen.
 mail.title=Einladungs-E-Mail
 box.preview=Vorschau
 box.share.text=Sie können jetzt die ausgewählten Bilder mit Ihren Freunden teilen.
@@ -6880,7 +6880,7 @@ browser.cancel=Abbrechen
 browser.selectImage=übernehmen
 browser.starImage=merken
 browser.removeImage=Löschen
-browser.searchForSimilarImages=ähnliche
+browser.searchForSimilarImages=\uFFFD\uFFFDhnliche
 browser.clear_drop_box=löschen
Run Code Online (Sandbox Code Playgroud)

还有一些线路发生了变化,我没有碰过.我不明白为什么我会这样做.可能是上述问题的原因是什么?

我的系统:

  • Antergos/Arch Linux

    • 系统编码UTF-8

      Python 3.5.0 (default, Sep 20 2015, 11:28:25) 
      [GCC 5.2.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import sys
      >>> sys.getdefaultencoding()
      'utf-8'
      
      Run Code Online (Sandbox Code Playgroud)
  • Eclipse Mars 1

    • 编码UTF-8的文本文件 ext文件编码
    • 属性文件编码为UTF-8 属性文件编码
  • 雄猫8
  • Java JDK 8

如果我使用像Atom这样的其他编辑器来编辑这些消息属性文件,我不会遇到这个问题.

我也在一个案例中意识到,如果我browser.searchForSimilarImages=ähnliche从Git diff 复制原始值并用browser.searchForSimilarImages=\uFFFD\uFFFDhnlicheEclipse 替换错误的值,那么我在消息属性文件中有正确的变音符号.

hag*_*wal 31

根本原因:

默认情况下,ISO 8859-1字符编码用于Eclipse属性文件(在此处阅读),因此如果文件包含ISO 8859-1之外的任何字符,则不会按预期处理它.

解决方案1

如果您使用Eclipse,那么您会注意到它隐式地将特殊字符转换为\ uXXXX等效字符.尝试复制

会意字/会意字

到Eclipse中打开的属性文件中.

编辑:根据OP的评论

更新Eclipse的编码,如下所示.如果您将编码设置为UTF-32,那么即使您可以看到中文字符,您通常也看不到.

如何在Eclipse中更改属性文件的编码:有关更多详细信息,请参阅 Eclipse Bugzilla错误,其中讨论了其他几种可能性,最后建议我在下面突出显示的内容. 在此输入图像描述

正确设置编码后,可以在Eclipse中看到中文字符: 在此输入图像描述

解决方案2

如果上面不能一致地为你工作(它确实对我有效,我从来没有看到编码问题),那么尝试使用一些处理属性或其他文件编码的Eclipse插件.例如Eclipse ResourceBundle EditorExtended Resource-Bundle编辑器

我建议使用Eclipse ResourceBundle Editor.

解决方案3

更改文件编码的另一种可能性是使用Edit --> Set Encoding选项.这非常重要,因为它会更改默认字符集和文件编码.通过使用Edit --> Set Encoding选项更改编码来进行操作,并执行以下Java sysout System.out.println("Default Charset=" + Charset.defaultCharset());System.out.println(System.getProperty("file.encoding"));

在此输入图像描述


暂且不说:1

使用native2ascii - Native-to-ASCII Converter处理属性文件以使内容具有ISO 8859-1字符编码

什么native2ascii的作用:它把所有的非ISO 8859-1在其等效为\ uXXXX字符.这是一个很好的工具,因为你不需要搜索\ uXXXX等效的特殊字符.

UTF-8的用法: native2ascii -encoding utf8 e:\a.txt e:\b.txt


暂且不说:2

每个计算机程序,无论是IDE,应用程序服务器,Web服务器,浏览器等,只能理解位,因此需要知道如何解释这些位以使其具有预期的意义,因为根据所使用的编码,相同的位可以表示不同的字符.而这就是"编码"通过给出一个唯一的标识符来表示一个角色,以便所有计算机程序,各种操作系统等知道解释它的正确方法.

因此,如果您使用某种编码方案写入文件,让我们说UTF-8,然后使用任何编辑器进行读取,但使用编码方案作为UTF-8运行,那么您可以期望得到正确的显示.

请阅读我的这个答案以获取更多详细信息,但从浏览器 - 服务器的角度来看.

  • 注意:在 JAVA9 中,UTF-8 现在是属性的默认值 https://docs.oracle.com/javase/9​​/intl/internationalization-enhancements-jdk-9.htm#JSINT-GUID-974CF488-23E8-4963 -A322-82006A7A14C7 - 但您可能需要专门配置 eclipse。 (2认同)

til*_*ois 2

属性文件预计采用ISO-8859-1 (Latin-1)编码。很可能这也是 eclipse 默认设置的。

您必须确保构建中运行的每个工具或其他工具都忽略规范并使用 UTF-8。

  • 它发生了变化:自java 9以来,预计为UTF-8 https://docs.oracle.com/javase/9​​/intl/internationalization-enhancements-jdk-9.htm#JSINT-GUID-974CF488-23E8-4963- A322-82006A7A14C7 (3认同)