场景:从流中读取一个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();