Java 将标准字符串转换为 CP1250,每个字符只有一个字节



我需要将标准字符串转换为CP1250,每个字符只有一个字节,因此例如波兰字符"ł"应该解析为0xB3,没有两个字节的Unicode。当我尝试做这样的事情时:

byte[] array = "ała".getBytes();
s = new String(array, 0, array.length, Charset.forName("CP1250"));

接下来,如果我正在做 s.getBytes(); 它返回的字节比字母多,对于 'ł' 是 2 个字节,就像 unicode 一样。我需要转换每个字符串并从中获取字节,使其完全符合 CP1250 代码,如下所示:https://pl.wikipedia.org/wiki/Windows-1250#Tablica_kod.C3.B3w

通过在将字符串转换为字节时提供字符集来做到这一点:

    byte[] array = "ała".getBytes("CP1250");

您正在使用 Java 的默认字符集将String转换为字节数组,无论它碰巧是什么(它可能是 UTF-8,也可能是其他东西。这是一个可配置的选项)。 然后你把这些字节转换回String,但告诉转换器这些字节被编码为 CP1250,而它们可能不是。 所以你最终可能会得到一个损坏的String. 但无论哪种方式,你最终仍然会得到一个String,这不是你想要的。

您需要告诉getBytes()您希望将字节编码为 CP1250,例如:

byte[] array = "ała".getBytes("CP1250");

或:

byte[] array = "ała".getBytes(Charset.forName("CP1250"));

最新更新