HttpURLConnection 接收长字符串时出现中文乱码出现问号��

文章讲述了在使用HttpURLConnection处理长字符串时,由于边读边转码导致的中文乱码问题,提出正确的解决方案是将所有字节读取到内存缓冲区再统一转码。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值