读取一个网页时编码正确部分中文乱码

本文探讨了在APP开发过程中遇到的汉字乱码问题,并详细分析了其根本原因。通过改变数据读取方式,从字节缓冲转换为字符缓冲,最终成功解决了乱码问题。

在做一个app,需要数据源,就去网上抓取,在展示时方向总是有个别汉字是乱码,抓狂

在网上找的的解决方案五花八门
方案一:在网络请求时设置请求头信息,告诉服务器要请求的编码
方案二:new String(str.getBytes(“encode”), “encode”);
方案三:设置IDE的编码方式

只能说,通通pass,我要请求的编码没错,是utf-8,开发工具的编码也是utf-8,那么为什么会乱码呢

原因

在我们得到一个页面的数据流并读取它时,通常会创建一个缓冲,如byte[] buff = new byte[1024]。
那么问题来了,一个汉字是占用两个字节,这就有可能会造成一个汉字会被分成两次读取,这样这个汉字在转为字符串是自然也就不能正确解码了。

解决方案

既然汉字占两个字节,那么我们就两个字节两个字节的读取呗,把读取时的字节流转为字符流,缓冲也由字节缓冲换为字符缓冲,OK,搞定!

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
InputStreamReader ir = new InputStreamReader(in); //字节流转字符流
char[] buff = new char[1024];
int len = -1;
StringBuffer sb = new StringBuffer();
while((len = ir.read(buff)) != -1){
    sb.append(buff, 0, len);
}
in.close();
ir.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值