2

我正在开发一个项目,当我尝试从属性文件中使用Java中的ResourceBundle读取日文字符串时,我得到的只是一堆问号( ?????????)显示在我的应用程序中。使用资源包从属性文件中读取日文字符

我知道我需要以某种方式对字符串进行编码,但我尝试了几种不同的方式,但没有运气。我也尝试在文本编辑器中编码属性文件,但这似乎并不工作,我也想要。我的代码检索字符串如下。我知道你可以使用流读取器和其他方法来做到这一点,但我想尽可能使用ResourceBundle来保持当前的代码结构。如果有人有任何问题或需要澄清,请随时告诉我。

private final ResourceBundle bundle = ResourceBundle.getBundle("propertiesFile"); 

titleText = bundle.getString("title.text"); 

只给你一个想法,title.text =会议参加者事前登录用ページ我的属性文件。

任何建议表示赞赏。这已经变成了一个真正的痛苦。再次

感谢,

-Dave F.

+0

首先,您需要将'.properties'文件编码为UTF-8,然后使用其UTF-8编码表示来存储这些字符......我之前用西班牙文字符尝试过,它的工作原理与此类似,所以它应该与日文字符相似 –

回答

0

当你运行你的应用程序,你可以试试这个:

java -Dfile.encoding=UTF-8 -jar YourApp.jar 

这主要设置默认字符集

+0

我也看到了这种方法,但不幸的是该项目使用蚂蚁 – MotoDave452

+0

构建为.war文件即使所有文件都编码为UTF-8,也会遇到同样的问题。 – JFPicard

1

资源包只能读ISO 8859-1文件。看到这个线程。 How to use UTF-8 in resource properties with ResourceBundle

我这里有同样的问题,我已经将我的ResourceBundle到Properties对象就像在这个线程的答案:read resourcebundle as UTF-8. getString() Method seems to change encoding to ISO-8859

像这样:

InputStream utf8in = getClass().getClassLoader().getResourceAsStream("/path/to/utf8.properties"); 
Reader reader = new InputStreamReader(utf8in, "UTF-8"); 
Properties props = new Properties(); 
props.load(reader); 
+0

非常感谢您的帮助。这似乎是一种可行的处理方式。如果我可能会问,一旦我得到了我的属性文件的句柄并使用上述方法对文件进行编码,我将如何获得属性文件中的title.text **属性的句柄并将其值赋给字符串那我可以利用? – MotoDave452

+0

只要做props.getProperty(“title.text”)。此外,您可以将此代码放入类中,以便在每次需要本地化字符串时不重复该代码。 – JFPicard

1

经过一番研究,我实际上仍然能够使用ResourceBundle方法。

在我的属性文件资源包从拉,我列出的unicode以下几点:

title.text=\u4f1a\u8b70\u53c2\u52a0\u8005\u4e8b\u524d\u767b\u9332\u7528\u30da\u30fc\u30b8 

当资源包中拔出,将其转换为:

会議参加者事前登録用ページ 

我敢肯定,这可能并不是最好的做法,但它不需要改变整个项目在资源属性中的吸引力,所以我只是认为我会和大家分享我的帮助。