个人随笔
目录
从流中读取中文GBK编码的数据偶尔出现乱码的坑
2019-02-18 21:17:16

场景:从流中读取一个json字符串,字符串里面有中文,整个字符串用GBK编码,此时我这边用缓冲方法分段读取数据,发现偶尔会有中文的字符乱码,导致这边解析json失败。

原因:我这边是用while循环来一定长度字节获取的,而中文的GBK是由两个字节编码组成的,此时就会导致一个中文被分成两个字节来解析,最终出现乱码的情况。

解决办法:一次性全部读取回来。

实际例子:这个例子是自己在开发中遇到的例子,改为如下:

  1. int l = (int) message.getBodyLength();
  2. System.out.println("message的长度:"+l);
  3. //若是这个不是用流中字节的长度,就会出现上面的问题
  4. byte[] buff = new byte[l];
  5. //byte b =message.readByte();
  6. int len;
  7. StringBuffer sb =new StringBuffer();
  8. int index=0;
  9. while ((len=message.readBytes(buff))!=-1){
  10. sb.append(new String(buff,0,len,"GBK"));
  11. vindex++;//这里只会执行一次,因为一下读取了全部
  12. System.out.println("index:"+index);
  13. }
  14. content=sb.toString();
 423

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2