Как я могу преобразовать байт CP-1252 в байт UTF-8 в Java

Я уже пробовал конвертировать байт 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());
  }
}

1 ответ

Решение

Вы должны использовать "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 поддерживает кодировки

Как указано 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());
    }
Другие вопросы по тегам