为何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)); } 输出: c7 11000111 //-57的二进制补码 ef 11101111阅读上一篇:一个collection接口的方法求解释,多谢 下一篇:返回列表