我使用 i18n 的属性。如果我指定非英语语言环境:
ResourceBundle messages = ResourceBundle.getBundle("i18n/Messages", new Locale("tr", "TR"));
Run Code Online (Sandbox Code Playgroud)
我看到编码错误的消息:
ÐÑивеÑ!
Run Code Online (Sandbox Code Playgroud)
如何设置正确的编码?
问题:默认情况下,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)