求助:Java字符集问题

lifeequation 2007-07-16 12:34:27
有如下有关字符集转换的代码段:
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,这个过程的转换机制是怎么样的?如何对应起来,最好能够帮忙详细解答一下,谢谢。
...全文
263 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjg2124 2007-07-16
  • 打赏
  • 举报
回复
晕 不是楼上 是masse()
zhangjg2124 2007-07-16
  • 打赏
  • 举报
回复
同意楼上
caibaoying 2007-07-16
  • 打赏
  • 举报
回复
没搞过````听高人讲解``
masse 2007-07-16
  • 打赏
  • 举报
回复
0x81转换之后是?,这个占1个字节
0x40转换之后是@,同上
0xb00xa1转换后是"啊",这个占2个字节

事实上,0x81在新的字符集里面没有对应字符,所以是?
所以转换后的16进制是fffd,你把0xa1单独转换也会是?
tkdg0224 2007-07-16
  • 打赏
  • 举报
回复
排队听课

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧