Eclipse 中的 Java 属性 UTF-8 编码

2022-08-31 20:42:21

我最近不得不将我正在处理的web应用程序的编码切换到.一切都很顺利,除了属性文件。我添加了,正常文件工作正常。但是,属性显示一些奇怪的行为。ISO-xxutf8-Dfile.encoding=UTF-8eclipse.ini

如果我从Notepad ++复制编码的属性并将它们粘贴到Eclipse中,它们显示并正常工作。当我重新打开属性文件时,我看到一些Unicode字符而不是正确的字符,例如:utf8

Zur\u00EF\u00BF\u00BDck instead of Zurück

但应用程序仍然工作正常。如果我开始编辑属性,添加一些特殊字符并保存,它们会正确显示,但是它们不起作用,并且所有以前工作的特殊字符都不再起作用。

当我将本地版本与CVS进行比较时,我可以在远程文件上正确看到特殊字符,更新后我再次启动:应用程序工作正常,但Eclipse显示Unicode字符。

我尝试通过右键单击它并选择“其他:UTF8”来更改文件编码,但它没有帮助。它还说:“从内容确定:ISO-8859-1”

我正在使用基于Eclipse 3.3的Java 6和Jboss Developer。

我可以通过在Notepad ++中编辑属性并将它们粘贴到Eclipse中来接受它,但是如果有人可以帮助我在Eclipse中修复这个问题,我将不胜感激。


答案 1

“Java-9之前”的答案如下。从 Java 9 开始,属性文件默认以 UTF-8 保存和加载,但如果检测到无效的 UTF-8 字节序列,则回退到 ISO-8859-1。有关详细信息,请参阅 Java 9 发行说明


属性文件根据定义是 ISO-8859-1 - 请参阅属性类的文档。

Spring有一个替代品,可以使用RestinctsFactoryBean使用指定的编码加载。

编辑:正如 Laurence 在评论中指出的那样,Java 1.6 引入了重载,并采用 /。这意味着您可以使用所需的任何编码为文件创建读取器,并将其传递给 。不幸的是,仍然不允许您在构造函数(aargh)中指定编码,因此您将被困在链接和一起。但是,它会起作用。loadstoreReaderWriterloadFileReaderFileInputStreamInputStreamReader

例如,要使用 UTF-8 读取文件:

Properties properties = new Properties();
InputStream inputStream = new FileInputStream("path/to/file");
try {
    Reader reader = new InputStreamReader(inputStream, "UTF-8");
    try {
        properties.load(reader);
    } finally {
        reader.close();
    }
} finally {
   inputStream.close();
}

答案 2

不要浪费你的时间,你可以在Eclipse中使用资源包插件

Basic Screen Shot

旧源锻造页面


推荐