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

在做一个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();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
乱码察看器(CodeView) 版本:2.60 系统平台:Windows95/98/NT/2000 作者:董雪强 Email: smsdxq@sbell.com.cn 一、简介 乱码察看器顾名思义就是用来察看各种乱码的工具软件,目前支持MIME/BASE64, Quoted-Printable,HZ和UUCode四种形式的编码和解码,通过一些特殊的算法, 本程序还可以解开部分由于字节高位被屏蔽而形成的死乱码(使用其它方式的解 码),对于EMail中比较常见的乱码,还进行了特别的处理,可以较好的解决很 多乱码情况,另外还提供了很多附加的功能,比如单键解码功能和混合乱码识别 功能,使得使用本程序解码变得非常容易和轻松,希望这个小工具能带给你方便。 二、安装 本软件为绿色软件,无需安装,只要将得到的压缩文件解开到一个目录中即可运行。 三、使用 3种使用方法: 1、在有乱码的窗口中直接按下单键解码热键(默认为F7),如果窗口中乱码能被 识别,就会有一个窗口覆盖当前的乱码窗口,您可以直接在这个窗口中阅解码后 的内容。建议您在大多数情况下使用此方式。 2、将乱码内容通过剪贴板复制到CodeView的源窗口中,然后您可以试着试用不 同的解码方式进行解码。这种方式解码将给于您更多的选择自由,并且可以使用 一些在单键解码中无法实现的解码方式(主要是其他方式解码和UUCode解码), 对于一些单键解码无法解决的乱码可以使用此方式试试。 3、首先打开选项中监视剪贴板和智能弹出功能(默认为关闭),然后可以将 CodeView最小化,这,只要你将任何乱码复制到剪贴板中,如果能够被识别, CodeView会自动弹出,您可以选择相应的解码方法进行解码。如果上面的1,2都 不合你的要求,可以试试这个方式。 四、功能描述 支持MIME/BASE64,Quoted-Printable,HZ和UUCode四种形式的编码和解码 改进的混合乱码识别算法(多种乱码混合在一起可以正确识别不同乱码) 单键解码功能:只要选中需要察看的乱码文本(如果不选中任何内容,则会自动全选), 然后按下预先设定的热键(默认为F7),配合改进的识别算法,可以较好的将这些乱码 转成正常的文本,并可以很方便的阅读。 自动识别BIG5码(自动将BIG5码转成GB码) 支持某些HTML对汉字进行编码造成的乱码,并可以进行单键解码和混合乱码识别 繁体中文和简体中文互相转换(win2k下使用更方便了) 实监视剪贴板 自动解码 智能弹出 打开保存文件和文件拖放的支持 此外,还可以更改背景颜色及默认字体及其他一些功能。 五、版本历史 ……v2.60 新增加了某些HTML对中文进行编码所形成的乱码的识别支持 修正了程序运行Windows无法关机的问题 修正了一些小Bug ……v2.50 这个版本没有增加新的功能,但是重新编写了所有的解码编码算法,速度得到极大提高。 ……v2.24 增加了可扩充的多语言支持 改进了乱码识别算法,可以更好的识别邮件主题中的乱码 改进了其他方式的解码,更好的识别那些被屏蔽了高位的死乱码邮件 ……v2.22 增加了打开保存文件和文件拖放的支持。 修正了GB->BIG5转换的BUG,修正了HZ码转换的BUG。 ……v2.20 增加了BIG5和GB相互转换功能,并提供了在解码自动进行BIG5->GB功能 改进了混合乱码识别 增加了单键解码功能 ……v2.00 大幅改进了操作界面 增加了混合乱码识别功能 修正了v1.x版中监视剪贴版的BUG。 ……v1.0 第一个发布的版本,具备了很多基本的功能。 六、一些说明 首先说明的一点就是:由于乱码的多样性,我不能保证本程序能100%的解决所有的乱码,有相当 一部分乱码是根本无法解开的(最常见的无法解开的乱码形式就是有很多?号的乱码)。 由于本程序主要是用来帮助阅读文本形式的乱码,因此对于一些经过了编码的邮件附件本程序还 不提供支持,不过您可以将这些编码后的附件保存为*.uue,然后用winzip进行解码。 关于混合乱码识别: 由于乱码的多样性,导致混合乱码识别会有一定的误判存在,表现在原本正常的一些 内容变成了乱码,这请只复制乱码部分,而不要包含正常的文字即可。 关于智能弹出: 由于采用了混合乱码识别,导致一些正常文本复制到剪贴板程序也会自动弹出,这 请将其设置为不要自动弹出,可以避免一些不必要的麻烦。 有任何意见和建议请和我联系:smsdxq@sbell.com.cn

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值