如何为捆绑设置编码?

Joh*_*ter 1 java

我使用 i18n 的属性。如果我指定非英语语言环境:

ResourceBundle messages = ResourceBundle.getBundle("i18n/Messages", new Locale("tr", "TR"));
Run Code Online (Sandbox Code Playgroud)

我看到编码错误的消息:

ÐÑивеÑ!
Run Code Online (Sandbox Code Playgroud)

如何设置正确的编码?

hag*_*wal 5

问题:默认情况下,ISO 8859-1 字符编码用于读取属性文件的内容,因此如果文件包含超出 ISO 8859-1 的任何字符,则将无法正确处理。

第一种解决方案: 使用native2ascii - Native-to-ASCII Converter处理属性文件以包含具有 ISO 8859-1 字符编码的内容

什么native2ascii的作用:它把他们等同为\ uXXXX所有非ISO 8859-1字符。这是一个很好的工具,因为您不需要搜索特殊字符的 \uXXXX 等价物。

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

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

???/ ???

进入在 Eclipse 中打开的属性文件。

第二种解决方案:创建一个自定义ResourceBundle.Control类,可用于ResourceBundle读取任何给定编码方案中的属性。您可能希望使用已创建和共享的CustomResourceBundleControl。如下使用:

ResourceBundle messages = ResourceBundle.getBundle("i18n/Messages", new CustomResourceBundleControl("UTF-8"));
Run Code Online (Sandbox Code Playgroud)