【发布时间】:2016-04-13 08:49:46
【问题描述】:
我对属性文件中的德语“元音变音”有疑问。现在我完全明白我必须转义超出 ISO-8859-1 范围的字符,并且我过去为此使用了 native-to-ascii 转换。
但是为什么像“ü”这样的元音变音也搞砸了?它们是 ISO-8859-1 的一部分,如果阅读文档正确,Java 中的 ResourceBundles 将使用 ISO-8859-1 阅读。我也将该编码用于我的属性文件。 有人能告诉我为什么会这样吗?
示例代码:
创建一个包含以下消息的 .properties(确保将其保存为 ISO-8859-1)
testMessage=ä ü ö Ä Ü Ö this message is used to test ResourceBundle - loading!
使用以下测试方法创建一个测试类:
@Test
public void testEncoding() {
String mess = ResourceBundle.getBundle("i18n.messages").getString("testMessage");
Assert.assertEquals("ä ü ö Ä Ü Ö this message is used to test ResourceBundle - loading!", mess);
}
现在在我的情况下,结果是:
org.junit.ComparisonFailure:
Expected :ä ü ö Ä Ü Ö this message is used to test ResourceBundle - loading!
Actual :� � � � � � this message is used to test ResourceBundle - loading!
*编辑: 看来这是我的 IntelliJ 的问题。如果我执行单元测试并检查 target/i18n/messages.properties,那么那里的属性已经搞砸了。我仔细检查了源文件的编码(在记事本中),还验证了我的 IDE 将其解释为 ISO-8859-1。还是没有头绪:(
【问题讨论】:
-
这个测试对我来说运行得很好
-
您确定将属性文件保存在 ISO-8859-1 中吗,因为它看起来像是以 UTF-8 保存的。
-
更正,你所有的字符似乎都被编码为0xEFBFBD,这是UTF-8中的字符替换符号。
-
我在上面编辑了我的答案。这似乎与我的 IDE 有关,如果我使用 Maven 执行测试,它可以正常工作。
标签: java character-encoding internationalization resourcebundle