求助:Java字符集问题
有如下有关字符集转换的代码段:
byte[] buf ={ (byte)0x81,(byte)0x40,(byte)0xb0,(byte)0xa1 };
//将二进制数据按照GB2312向Unicode编码转换
String str = new String(buf, "GB2312 ");
for(int i = 0; i < str.length() ; i++)
{
char ch = str.charAt(i);
//将该字符对应的Unicode编码以十六进制的形式输出
System.out.print(Integer.toHexString((int)ch));
System.out.print( "-- ");
System.out.println(ch);
}
程序的最终输出结果是:
fffd--?
40--@
554a--啊
我的不明白的地方是:
四个字节的buf,转换后为什么str的长度会是3,这个过程的转换机制是怎么样的?如何对应起来,最好能够帮忙详细解答一下,谢谢。
------解决方案--------------------排队听课
------解决方案--------------------0x81转换之后是?,这个占1个字节
0x40转换之后是@,同上
0xb00xa1转换后是 "啊 ",这个占2个字节
事实上,0x81在新的字符集里面没有对应字符,所以是?
所以转换后的16进制是fffd,你把0xa1单独转换也会是?
------解决方案--------------------没搞过````听高人讲解``
------解决方案--------------------同意楼上