public static void main(String [] args) throws Exception
{
byte[] bytes = {(byte)0xC0,(byte)0xB1};





输出结果是:1。
查找了相关资料,看了很多大哥的见解。剽窃他人加上自己的一些理解如下:
将byte数组以UTF-8编码方式转化成String(重点),然后对该String以getByte("UTF-8")以"UTF-8"格式读出String的位数。
其中的关键点在于:将byte数组以UTF-8编码方式转化成String
0xc0,0xb1---------------〉1100 0000、1011 0001
以为1100 0000+1011 0001一共是16位2BTYE。
按照UTF-8的转化规则
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
如果转化的是一个字节长度 以首位为0 剩下的七位x与原一样。
如果转化的是两个字节长度,去掉原来的第一个byte的前三位,和第二个Byte的前
两位。
例中:1100 0000+1011 0001转化后:0 0000+ 11 0001
但是这并非标准的UTF-8编码。前面的所有的0去掉后成为:11 0001。成了一个byte了。
另外Unicode与UTF-8还是有区别的:
在内存中,识别的是Unicode.而UTF-8是Unicode Text Format多用于文件等。