首先byte[] bs = data.getBytes( "GBK" );这行代码已经将上述字符串解码成字节数组,这之后基本就可以说和你原来的字符出没有什么关系了,
System.out.println( Arrays.toString( bs ) ); 是打印出一个字节数组的各个元素值,即【-60,-29,-70,-61】
刚才你提到的“GBK每个字符占两个字节,UTF-8占三个字节”,这个是不完全正确的,因为英文字母在任何编码集里貌似都是一字节,
所以String str = new String( bs , "UTF-8" ); 这行代码在对字节数组重新编码的时候,他不清楚他是什么,英文还是中文,它只是尝试着去编码,
最后它只得到了3个字符,
你可以做以下的试验:字节数组为左边一列,利用String str = new String( bs , "UTF-8" ); 进行编码
【-60,-29,-70,-61】 为3个字符,
【-60,-29,-70】 为2个字符,
【-60,-29】 为2个字符,
【-60】 为1个字符,
【-29,-70】 为1个字符 |