为了开发我正在使用ResourceBundle
直接从 IDE 中的资源目录读取 UTF-8 编码的属性文件(我在该文件的 Eclipse 文件属性中设置)(native2ascii 用于生产),例如:
menu.file.open.label=&Öffnen...
label.btn.add.name=&Hinzufügen
label.btn.remove.name=&Löschen
由于使用非 ASCII 字符时这会导致字符编码出现问题,我想我会对此感到满意:
ResourceBundle resourceBundle = ResourceBundle.getBundle("messages", Locale.getDefault());
String value = resourceBundle.getString(key);
value = new String(value.getBytes(), "UTF-8");
嗯,它确实适用于小写的德语变音符号,但不适用于大写的德语变音符号,ß
也不起作用。这是读取的值getString(key)
以及转换后的值new String(value.getBytes(), "UTF-8")
:
&Löschen => &Löschen
&Hinzufügen => &Hinzufügen
&Ã?ber => &??ber
&SchlieÃ?en => &Schlie??en
&Ã?ffnen... => &??ffnen...
最后三个应该是:
&Ã?ber => &Über
&SchlieÃ?en => &Schließen
&Ã?ffnen... => &Öffnen...
我想我离真相并不太远,但我在这里错过了什么?
谷歌发现相似的东西 http://osdir.com/ml/text.xml.xindice.user/2003-10/msg00056.html,但这仍然没有答案。
编辑:更多代码
问题是你正在打电话String.getBytes()
without指定编码 - 将使用默认平台编码。然后您将使用该操作的二进制结果as if它是UTF-8格式的。
如果你在两个方向都使用UTF-8,那就没问题了:
// Should be a round-trip
value = new String(value.getBytes("UTF-8"), "UTF-8");
...但是如果您尝试使用它来读取 UTF-8 编码的属性文件而不告诉执行该操作的代码initial读吧,那是行不通的。
您提供的代码基本上是always错误的做法。您的“因为这会导致字符编码出现问题”表明您已经遇到了之前的问题 - 所以我会回到那个问题,而不是尝试应用损坏的修复程序。如果您在构建时已经丢失了数据ResourceBundle
,稍后再回去就太晚了...你需要确保ResourceBundle
本身已正确加载。
请告诉我们exactly你遇到了什么问题ResourceBundle
,我们可以看看是否可以解决根本原因。
编辑:目前尚不清楚你如何运行native2ascii。修复may就像更改为 use 一样简单:
native2ascii -encoding UTF-8 input.properties output.properties
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)