我做了下面的「模擬」:爲什麼新的String(bytes,enc).getBytes(enc)不返回原始字節數組?
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
的文字部分,因此,問題仍然只是出於好奇
太棒了。我實際上是在.NET中尋找答案,但他們在行爲上的相似程度足以讓我從中收集到。謝謝。 – 2010-03-30 12:33:44