我进行了以下的 "模拟":
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
表示文本部分,因此问题仅出于好奇。