遇到一个很奇怪的问题
我的byte[]数组byte1内存储的数据为:45,116,20,-45,94,-92
我将字节转为String
String strResult = new String(byte1);
在获得新的byte[] byte2
byte[] byte2 = strResult.getBytes();
这时候打印byte2数据存储为45,116,20,-45,94,63
请教各位老大。。帮忙解决阿。。在线等。马上加分.
我的byte[]数组byte1内存储的数据为:45,116,20,-45,94,-92
我将字节转为String
String strResult = new String(byte1);
在获得新的byte[] byte2
byte[] byte2 = strResult.getBytes();
这时候打印byte2数据存储为45,116,20,-45,94,63
请教各位老大。。帮忙解决阿。。在线等。马上加分.
String strResult = new String(byte1);
byte[] byte2 = strResult.getBytes();我试了,没有问题啊。
可能和encoding的设置有关...
如过你仅仅是为了转化后正常,那你在byte1后加多一个负数,如-1,byte2还原后的数组去掉最后的数(63 或 -1)就可以了,虽然这种方式很搞笑...
是用系统默认的。
如果你是在中文系统下,就是 GBK。
这时虚拟机就将那些 bytes 看成是字符的 GBK 表示,
要寻找这些字对应的 UNICODE。。GBK 是 DBMS 编码,
也就是,小于 0x80 的,这个 byte 就是一个字符,跟 ASCII 的意义相同;
>= 0x80 的,就将该byte跟下一个byte合起来,两个bytes表示一个字符。当然这里有较多细节,如并非所有的 2-bytes 都表示有意义的字符等等。还有是某个标准规定,
如果转换过程中找不到对应字符的,就用 ? 代替。现在看你的数据,
45,116,20,-45,94,-92 的 16进制表示是 2D 6A 14 D3 5E A4
按GBK表示,字符划分分别是
2D
6A
14
D3 5E (2-bytes)
A4 。。(这里没东西:()
很明显,最后一个不能找到正确的对应,就用 ? 代替
? = 0x3f = 63
所以最好用其他方法,
如果实在不行,就指定 encoding 为 ISO-8859-1
如 new String(bytes, "ISO-8859-1")
getBytes(string, "ISO_8859-1")OVER!!