Я сделал следующее "симуляцию":
byte[] b = new byte[256];
for (int i = 0; i < 256; i ++) {
b[i] = (byte) (i - 128);
}
byte[] transformed = new String(b, "cp1251").getBytes("cp1251");
for (int i = 0; i < b.length; i ++) {
if (b[i] != transformed[i]) {
System.out.println("Wrong : " + i);
}
}
Для cp1251
выводится только один неправильный байт - в позиции 25.
Для KOI8-R
- все отлично.
Для cp1252
- 4 или 5 различий.
В чем причина этого и как это можно преодолеть?
Я знаю, что неправильно представлять байтовые массивы в виде строк в любой кодировке, но это требование протокола поставщика платежей, поэтому у меня нет выбора.
Обновление:, представляющее его в ISO-8859-1
, работает, и я буду использовать его для части byte[]
и cp1251
для текстовой части, поэтому вопрос остается только из любопытства