我需要使用UTF-8在我的资源属性使用Java的ResourceBundle。当我直接在属性文件中输入文本时,它显示为mojibake。

我的应用程序运行在谷歌应用程序引擎。

谁能给我举个例子?我找不到这份工作。


当前回答

假设你有一个ResourceBundle实例,你可以通过以下方式获取String:

String val = bundle.getString(key); 

我解决了我的日语显示问题:

return new String(val.getBytes("ISO-8859-1"), "UTF-8");

其他回答

Properties prop = new Properties();
String fileName = "./src/test/resources/predefined.properties";
FileInputStream inputStream = new FileInputStream(fileName);
InputStreamReader reader = new InputStreamReader(inputStream,"UTF-8");

这个问题终于在Java 9中得到了解决: https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9

属性文件的默认编码现在是UTF-8。

大多数现有属性文件不应受到影响:UTF-8和 ISO-8859-1对ASCII字符有相同的编码 人类可读的非ascii ISO-8859-1编码不是有效的UTF-8。如果一个 检测到无效的UTF-8字节序列,Java运行时 自动重新读取ISO-8859-1中的文件。

看这个:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)

属性接受Reader对象作为参数,您可以从InputStream创建该对象。

在创建时,你可以指定Reader的编码:

InputStreamReader isr = new InputStreamReader(stream, "UTF-8");

然后将这个Reader应用到load方法:

prop.load(isr);

顺便说一句:从.properties文件中获取流:

 InputStream stream = this.class.getClassLoader().getResourceAsStream("a.properties");

顺便说一句:从InputStreamReader获取资源包:

ResourceBundle rb = new PropertyResourceBundle(isr);

希望这能帮助到你!

从Java 9开始,加载属性文件的默认值已更改为UTF-8。https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm

ResourceBundle。例如,如果属性文件使用cp1251字符集,则使用UTF-8和new String方法的控件将不起作用。

所以我建议使用一种常用的方法:使用unicode符号。:

IDEA -有一个特殊的“透明本机到ascii转换”选项(设置>文件编码)。

Eclipse——有一个插件“属性编辑器”。它可以作为单独的应用程序工作。