场景:从流中读取一个json字符串,字符串里面有中文,整个字符串用GBK编码,此时我这边用缓冲方法分段读取数据,发现偶尔会有中文的字符乱码,导致这边解析json失败。
原因:我这边是用while循环来一定长度字节获取的,而中文的GBK是由两个字节编码组成的,此时就会导致一个中文被分成两个字节来解析,最终出现乱码的情况。
解决办法:一次性全部读取回来。
实际例子:这个例子是自己在开发中遇到的例子,改为如下:
int l = (int) message.getBodyLength();System.out.println("message的长度:"+l);//若是这个不是用流中字节的长度,就会出现上面的问题byte[] buff = new byte[l];//byte b =message.readByte();int len;StringBuffer sb =new StringBuffer();int index=0;while ((len=message.readBytes(buff))!=-1){sb.append(new String(buff,0,len,"GBK"));vindex++;//这里只会执行一次,因为一下读取了全部System.out.println("index:"+index);}content=sb.toString();
