- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为了开发,我使用 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/
我有以下代码,它会产生令人困惑的输出.. import java.io.UnsupportedEncodingException; import java.nio.charset.Charset;
考虑以下几点: public static void main(String... strings) throws Exception { byte[] b = { -30, -128, -9
今天看到一段代码,其中使用了UTF8Encoding.UTF8.GetBytes和Encoding.UTF8.GetBytes。它们之间有什么区别吗? 最佳答案 完全没有区别。 Encoding.UT
谁能解释一下赌注的区别是什么。 Encoding.UTF8.GetBytes 和 UTF8Encoding.Default.GetBytes?实际上,我正在尝试将 XML 字符串转换为流对象,现在发生
我需要使用 UTF-8 编码将字符串编码为字节数组。我正在使用 Google guava,它的 Charsets 类已经为 UTF-8 编码定义了 Charset 实例。我有两种方法: String.
我在 C# 和 Java 之间传递数据,分 4 个阶段进行转换: 到字节数组 到字符串(只需将每个字节添加为字符) 到 UTF8 字节4 转 base64 字符串 我发现 java 到 UTF8 的转
有什么区别 String(s.getBytes("UTF-8"),"UTF-8"); 和 String(s.getBytes(),"UTF-8"); 在第一个代码示例中,一些特殊字符被解码了,为什么以
我正在使用 Azure 事件中心,最初在发送数据以尝试计算批量大小时,我有类似于下面的代码,该代码将调用 EventData 。 GetBytes EventHubClient client;//in
我正在使用 Azure 事件中心,最初在发送数据以尝试计算批量大小时,我有类似于下面的代码,该代码将调用 EventData 。 GetBytes EventHubClient client;//in
我找到了一些答案,但没有一个适合我。我想从 html 制作一个 pdf 文件,但问题是我的 html 有西里尔字母,我发现这个简单的代码与此有关: String s = "Здраво Kris";
我正在生成一个 session key ,每次运行程序时该 key 都会发生变化。但是当我将其转换为字节数组时,每次运行程序时生成的字节数组都是相同的。 IT应该有所不同吧?这是我的代码 Key ke
import java.io.UnsupportedEncodingException; import java.util.Arrays; public class Main { public st
我正在为我的应用程序使用 ZXing 库,并且使用 this 类。但是当我运行我的应用程序时,我在这一行出现错误: String msg = "123456"; byte[] msgBinary =
这个问题已经有答案了: What 'length' parameter should I pass to SqlDataReader.GetBytes() (2 个回答) 已关闭 10 年前。 我对
这个问题在这里已经有了答案: How do I convert from int to String? (20 个答案) 关闭 5 年前。 java byte []b = (i+"").getByt
*"Hätten Hüte ein ä im Namen, wären sie möglicherweise keine Hüte mehr, sondern Häte." 72 -61 -92
我编写了自己的类,将 C# 标准原语转换为字节数组。 后来,我看了一下BitConverter类source ,看看专业人士是如何做到的。 我的代码示例: public static byte[] g
我正致力于在 .net 核心中编写自己的 DNS 服务器。我正处于对响应有效负载进行编码以发回的阶段,架构显示大多数数字都编码为 16 位数字。 C# 的整数是 32 位数字。没什么大不了的,我只是去
目前,我需要在 Java 中处理字符串的字节,这引发了很多关于 JVM 的编码和实现细节的问题。我想知道我所做的是否有意义,或者是否多余。 首先,我了解到在运行时,String 中的 Java cha
我尝试了许多带有随机字符的字符串,除了空字符串“”,它们的 .getBytes() 字节数组似乎从不包含任何 0 值(如 {123、-23、54、0、-92})。 他们的 .getBytes() 字节
我是一名优秀的程序员,十分优秀!