日期:2014-05-18  浏览次数:20696 次

求助: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单独转换也会是?

------解决方案--------------------
没搞过````听高人讲解``
------解决方案--------------------
同意楼上