Как я могу преобразовать байт 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());
}
}
Как указано 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());
}