HttpURLConnection 接收长字符串的时候随机位置出现中文乱码,显示问号,究其原因是utf8解码长度问题,程序上写法需要注意,要把字节全部读进来一起转码,不能边读取边转码,会截断中文的字节码,导致转码失败出现问号如:��。
错误示例:
InputStream inputStream=conn.getInputStream();
byte[] data=new byte[1024];
StringBuffer result=new StringBuffer();
int length=0;
while ((length=inputStream.read(data))!=-1){
//边接受边转码,最后拼接字符串,会出现截断字节码造成utf8转码不识别,出现问号如:��
String s=new String(data, 0,length);
result.append(s);
}
origin.put("result",result.toString());
正确解法:
InputStream inputStream=conn.getInputStream();
ByteArrayOutputStream message = new ByteArrayOutputStream();
// 定义读取的长度
int len = 0;
// 定义缓冲区
byte buffer[] = new byte[2048];
// 按照缓冲区的大小,循环读取
while ((len = inputStream.read(buffer)) != -1) {
// 根据读取的长度写入到os对象中
message.write(buffer, 0, len);
}
// 释放资源
inputStream.close();
message.close();
// 返回结果字符串 全部读取到字节数组中 统一转码
String result = new String(message.toByteArray());
origin.put("result",result);
这样就不会出现长字符串http传输接收中文��乱码了