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

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 //超时处理 }json

而我后来我查看了对方的页面编码,发现对方的页面编码为 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);post

这里顺便贴一下,编码设置后而且设置请求头信息的模拟。较为详细的 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 ---url

哦了!线程

相关文章
相关标签/搜索