日期:2014-05-20  浏览次数:20795 次

字节数组的编码格式问题,求交流!!
public static void testUTF8() throws UnsupportedEncodingException{
byte[] bytes = {
(byte)128,
};

String str = new String(bytes, "UTF-8");

System.out.println((int)str.charAt(0));
}


这段代码在我机器里面输出竟然是65533, 我查看UTF-8的编码格式之后,还是不得其解
求解释,求交流
------解决方案--------------------
首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533
------解决方案--------------------
引用:
Quote: 引用:

首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533

谢谢你的解答,我想知道为啥所有负数都会转换成-3,这个中间转换的过程是什么样的,谢谢


搜索了一下,楼主看一下 http://my.oschina.net/joymufeng/blog/139952 讲得比较清晰