gpt4 book ai didi

java - UTF-8 的 getBytes() 不适用于大写德语变音符号

转载 作者:搜寻专家 更新时间:2023-10-31 08:28:01 26 4
gpt4 key购买 nike

为了开发,我使用 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...

我想我离真相并不太远,但我在这里错过了什么?

Google 发现 something similar ,但仍未得到答复。

编辑:多一点代码

最佳答案

问题是您在调用 String.getBytes() 时没有指定编码 - 这将使用默认的平台编码。然后您使用该操作的二进制结果就好像它是 UTF-8 格式的。

如果你在两个方向上都使用UTF-8,那就没问题了:

// Should be a round-trip
value = new String(value.getBytes("UTF-8"), "UTF-8");

...但是如果您尝试使用它来读取 UTF-8 编码的属性文件而不告诉正在执行初始读取的代码,那是行不通的。

您提供的代码基本上总是是错误的方法。您的“因为这会导致字符编码出现问题”表明您已经遇到了一个较早的问题 - 所以我会回到那个问题,而不是尝试应用损坏的修复程序。如果您在构建 ResourceBundle 时已经丢失了数据,那么稍后返回就太晚了……您需要确保正确加载了 ResourceBundle 本身。

确切地告诉我们您在使用ResourceBundle 时遇到了什么问题,我们可以看看是否可以解决根本原因。

编辑:不清楚您是如何运行 native2ascii 的。修复可能就像更改使用一样简单:

native2ascii -encoding UTF-8 input.properties output.properties

关于java - UTF-8 的 getBytes() 不适用于大写德语变音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com