欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

HttpURLConnection 接收带有乱码汉字和问号的长字符串

最编程 2024-04-30 12:53:03
...

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