处理 windows-1252 和 java 中的 unicode

Handle windows-1252 and unicode in java

在 http 请求之后,我得到了一个用 utf-8 编码的字节数组,例如:

byte[] array = new byte[]{0xc3, 0xa4, 0xc2, 0x96}

我解码字节数组使用 new String(array, "UTF-8").

在示例中,第一个解码的字符是 0xe4,它代表 Unicode 中的字母 ä——到目前为止没有问题。第二个字符 0x96 代表 Windows-1252 中的破折号 而它代表 Unicode 中称为 spa start of guarded area 的一些控制字符。

由于 Java 将 char 解释为 Unicode,我得到了一些不可见的字符。

我的问题: 如何正确解码字节数组以获得 ä–(Unicode 中的0xe4 0x2013)。

提前感谢您的帮助:)

您的服务器似乎将 ISO-Latin-1 编码与专有 Windows-1252 代码页混淆,编码数据就是由此产生的结果。 Windows-1252 代码页仅在少数地方与 ISO-Latin-1 不同。

您可以通过使用错误假设的 Latin-1 将它们转换回服务器看到的字节来修复数据,然后将它们解释为 CP1252,如下所示:

String string = new String(array, "UTF-8");
byte[] fix = string.getBytes(StandardCharsets.ISO_8859_1);
string = new String(fix, "Windows-1252");