Java 将标准字符串转换为 CP1250,每个字符只有一个字节
Java converts standard String to CP1250 with only one byte for every char
我需要将标准字符串转换为 CP1250,每个字符只有一个字节,因此例如波兰语字符 'ł' 应该解析为 0xB3,没有两个字节的 unicode。
当我尝试做类似的事情时:
byte[] array = "ała".getBytes();
s = new String(array, 0, array.length, Charset.forName("CP1250"));
接下来如果我正在做 s.getBytes();它 returns 比字母多字节,'ł' 像 unicode 一样是 2 个字节。我需要转换每个字符串并从中获取字节以准确地转换为 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"));
我需要将标准字符串转换为 CP1250,每个字符只有一个字节,因此例如波兰语字符 'ł' 应该解析为 0xB3,没有两个字节的 unicode。 当我尝试做类似的事情时:
byte[] array = "ała".getBytes();
s = new String(array, 0, array.length, Charset.forName("CP1250"));
接下来如果我正在做 s.getBytes();它 returns 比字母多字节,'ł' 像 unicode 一样是 2 个字节。我需要转换每个字符串并从中获取字节以准确地转换为 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"));