【问题标题】: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"));
      

      【讨论】:

        猜你喜欢
        • 2010-09-17
        • 2012-05-19
        • 2012-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        • 2012-07-26
        相关资源
        最近更新 更多