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

来源:互联网 发布:nginx log by lua 编辑:程序博客网 时间:2024/05/17 08:55

在做一个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();
阅读全文
0 0