51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1807|回复: 0
打印 上一主题 下一主题

JSOUP教程,JSOUP 乱码处理,JSOUP生僻字乱码解决方案

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-11-8 17:25:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
JSOUP乱码情况产生 这几天我用 JSOUP 多线程的方式,爬取了200 多万数据,数据为各地的地名相关。结果有小部分数据,不到 1 万乱码。我先检查了我的编码为UTF-8 ,觉得应该没有问题。代码基本如下如下: try{ doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0") .header("Connection", "close")//如果是这种方式,这里务必带上 .timeout(8000)//超时时间 .get(); } catch (Exception e) {//可以精确处理timeoutException //超时处理 }

而我后来我查看了对方的页面编码,发现对方的页面编码为 GBK ,而返回数据为GB2312 ,那我们先尝试一下GBK 。

JSOUP乱码解决 其实在这里如果返回的 Document 乱码,就不用去再做转码了。比如有同学类似这样: String str = new String(docStr.getBytes("GBK"), "UTF-8");

其实没有太大作用, JSOUP 支持在请求的时候,传入URL 对象,然后设置编码。如下方式才是正解,设置编码为GBK 。 doc = Jsoup.parse(new URL(url).openStream(), "GBK", url);

这里顺便贴一下,编码设置后并且设置请求头信息的模拟。较为详细的 Demo 。 URL url = new URL("http://www.sojson.com"); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //默认就是Get,可以采用post,大小写都行,因为源码里都toUpperCase了。 connection.setRequestMethod("GET"); //是否允许缓存,默认true。 connection.setUseCaches(Boolean.FALSE); //是否开启输出输入,如果是post使用true。默认是false //connection.setDoOutput(Boolean.TRUE); //connection.setDoInput(Boolean.TRUE); //设置请求头信息 connection.addRequestProperty("Connection", "close"); //设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(8000);
//设置从主机读取数据超时(单位:毫秒)
connection.setReadTimeout(8000);
//设置Cookie connection.addRequestProperty("Cookie","你的Cookies" ); //开始请求 Document doc = Jsoup.parse(connection.getInputStream(), "GBK", "http://www.sojson.com");

//TODO ---

哦了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-11 03:47 , Processed in 0.064493 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表