java - 如何在java中将字节CP-1252转换为字节UTF-8

标签 java utf-8 converters typeconverter cp1252

我已经尝试过转换字节cp1252至字节utf8但一切都是徒劳。

例如:我有 byte[] 0xB5(cp1252)我想转换为 byte[] 0xC3, 0xA0(utf8) .

我想要这样: µ --> à.

我的代码但它不起作用:

public void convert(){
  try {
      byte[] cp1252 = new byte[]{(byte) 0xB5};
      byte[] utf8= new String(cp1252, "CP-1252").getBytes("UTF-8");
      // values of utf8 array are 0xC2, 0xB5 not 0xC3, 0XA0 as I expected
  } catch (Exception ex) {
      System.out.println(ex.getMessage());
  }
}

最佳答案

您应该使用“Cp1252”作为代码页,而不是“CP-1252”

public void convert(){
    try {
        byte[] cp1252 = new byte[]{(byte) 0xB5};
        byte[] utf8= new String(cp1252, "Cp1252").getBytes("UTF-8");
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

Java supported encodings

正如所指出的0xB5,您尝试解码的不是代码页 1252,上面的代码不会给您所需的结果。

如果您运行以下代码,您将看到没有编码可以执行您想要执行的转换

    try {
        byte[] u = new byte[]{(byte) 0xC3, (byte) 0xA0};

        SortedMap m = Charset.availableCharsets();
        Set k = m.keySet();
        Iterator i = k.iterator();
        String encoding = "";
        while (i.hasNext()) {
            String e = (String) i.next();
            byte[] cp = new String(u, "UTF-8").getBytes(e);
            if (cp[0] == (byte) 0xB5)
            {
                encoding = e;
                break;
            }
        }
        System.out.println(encoding);
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }

关于java - 如何在java中将字节CP-1252转换为字节UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30162618/

相关文章:

java - 编码问题 - 我认为 UTF-8 被视为 ISO-8859-1

windows - WMIC命令批量输出非UTF-8文本文件

audio - 机器人如何从 Facebook Messenger (MP4) 接收语音文件并将其转换为 Bing 或 Google 等语音引擎可识别的格式?

java - 将 JSON 数据转换为 Java 对象列表

pdf - wkhtmltopdf和汉字

mysql - 从 csv 文件导入日期作为 MySQL 数据库中的 DATE 格式

Java ArrayList、LinkedList 和 Stack 问题

java - 反序列化对象的所有字段均为 null

java - 如何在 Cruisecontrol 仪表盘上显示项目名称?

java - 如何在 Jersey/Jackson 中为抽象方法参数指定具体类型?