我做了下面的“模拟”:为什么新的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