当前位置: 代码迷 >> J2SE >> 为何str.getBytes("gbk")拿到的不是正确的gbk编码
  详细解决方案

为何str.getBytes("gbk")拿到的不是正确的gbk编码

热度:10380   发布时间:2013-02-25 00:00:00.0
为什么str.getBytes("gbk")拿到的不是正确的gbk编码?
"秋"字, 使用工具查询的GBK编码是 C7 EF。
C7 EF转换成10进制数是 199 239

Java code
String s = "秋";byte[] b = s.getBytes("gbk");for(int i=0; i<b.length; i++){    System.out.println(b[i]);}


结果输出的不是 199 239 而是 -57 -17
请问这是怎么回事?中间到底发生了什么?为什么结果不正确?

------解决方案--------------------------------------------------------
byte 最大值127 所以是-的
------解决方案--------------------------------------------------------
c7转为二进制:1100 0111,你输出的时候,系统会把这个看为一个整数,最高位为1,那就是一个负数。

1100 0111是补码,转为反码1100 0110,再转为原码1011 1001=-(1+8+16+32)=-57
------解决方案--------------------------------------------------------
Java code
String s = "秋";        byte[] b = s.getBytes("gbk");        for (int i = 0; i < b.length; i++) {            System.out.println(Integer.toHexString(b[i]&0xFF));            System.out.println(Integer.toBinaryString(b[i]&0xFF));        }输出:c711000111 //-57的二进制补码ef11101111
  相关解决方案