编程语言
首页 > 编程语言> > Java ResourceBundles变音符搞砸了

Java ResourceBundles变音符搞砸了

作者:互联网

我在属性文件中遇到德语“变音符”的问题.现在我完全明白,我必须转义超出ISO-8859-1范围的字符,并且为此使用了过去的本机到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.还是没有头绪:(

解决方法:

当转换为字符串时,ResourceBundle以ISO-8859-1格式加载内容.我在项目中使用的一种解决方案(严重破解?)如下:

我得到了字符串值,得到了它的字节,并用UTF-8编码创建了一个新的字符串.这样可以解决我的变音符号问题.

new String(ResourceBundle.getBundle("your.folder").getString("testMessage").getBytes("ISO-8859-1"), "UTF-8");

标签:character-encoding,resourcebundle,java,internationalization
来源: https://codeday.me/bug/20191118/2030985.html