byte字节数组转String部分乱码问题

lsoxi_2050 2012-07-24 09:38:55
cbuf[0]=-86;
cbuf[1]=85;
cbuf[2]=-52;
cbuf[3]=49;
cbuf[4]=53;
cbuf[5]=56;
cbuf[6]=54;
cbuf[7]=48;
cbuf[8]=54;
cbuf[9]=49;
cbuf[10]=54;
cbuf[11]=49;
cbuf[12]=52;
cbuf[13]=55;
cbuf[14]=10;
String strs=new String(cbuf,"UTF-8");
System.out.println(strs);
打印出来的结果为什么前面会乱码啊:?U?15860616147
...全文
1299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tr106501 2012-07-24
  • 打赏
  • 举报
回复
按照百度百科http://baike.baidu.com/view/25412.htm里提供的UTF-8的编码准则(变长编码方式)。连续的几个字节要按表中提供的方式分布才能正确解析。

从byte[]的低字节开始分析
-86对应的二进制1101 01010 : 从表可知,最低的那个字节只能是0开始或者是10开始。解析失败,给了个?
85对应的二进制的最高位时0 : 从表可知,满足第一种编码方式0XXXXXXX(用一个字节表示就可以)。85对应的ASCII码是U
-52对应的二进制是1110110:从表可知,最低的那个字节只能是0开始或者是10开始。解析失败,同样是?
剩下的所有byte都满足0XXXXXXX的编码方式,均用一个字节表示。
可以看到
49---1(ASCII码)
53---5
56---8
。。。
52---4
55---7
10---一个不可见字符

所以你打印的结果就是 ?U?15860616147
龙四 2012-07-24
  • 打赏
  • 举报
回复
你确定你的cbuf 0 到14是UTF-8编码吗?UTF-8采用的变长的字节数来表示一个字符
DAO 2012-07-24
  • 打赏
  • 举报
回复
一个byte转一个char,-86在char中为未定义字符?
DAO 2012-07-24
  • 打赏
  • 举报
回复
不是乱码只是:-86这个字符未定义?

81,094

社区成员

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

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