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传输接收中文��乱码了