【问题标题】:Java converts standard String to CP1250 with only one byte for every charJava将标准字符串转换为CP1250,每个字符只有一个字节
【发布时间】:2016-03-03 11:26:06
【问题描述】:
我需要将标准字符串转换为每个字符只有一个字节的 CP1250,因此例如波兰语 char 'ł' 应该被解析为 0xB3,没有两个字节的 unicode。
当我尝试做这样的事情时:
byte[] array = "ała".getBytes();
s = new String(array, 0, array.length, Charset.forName("CP1250"));
接下来,如果我在做 s.getBytes();它返回比字母更多的字节,对于 'ł' 是 2 个字节,如 unicode。我需要将每个 String 转换并从它们获取字节为 CP1250 代码,如下所示:
https://pl.wikipedia.org/wiki/Windows-1250#Tablica_kod.C3.B3w
【问题讨论】:
标签:
java
string
unicode
codepages
cp1250
【解决方案1】:
通过在将字符串转换为字节时提供字符集来做到这一点:
byte[] array = "ała".getBytes("CP1250");
【解决方案2】:
您正在使用 Java 的默认字符集将 String 转换为字节数组,无论它是什么(它可能是 UTF-8,也可能是其他东西。这是一个可配置的选项)。然后你将这些字节转换回String,但告诉转换器这些字节被编码为CP1250,它们可能不是。所以你最终可能会得到一个损坏的String。但无论哪种方式,你最终还是会得到一个String,这不是你想要的。
您需要告诉getBytes()您希望将字节编码为CP1250,例如:
byte[] array = "ała".getBytes("CP1250");
或者:
byte[] array = "ała".getBytes(Charset.forName("CP1250"));