技术博客

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

信息发布:soゝso 发布日期:2017-05-13 21:28 热度:1515 分享到:

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);

如果对方是UTF-8 ,那就设置为UTF-8 ,对应页面的编码,怎么看页面的编码?

这里会显示返回的编码类型和返回的类型,如text/html application/json 等等。

还有一种方式查看页面编码。右键页面源码,如下图所示


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

本文主题

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

¥我需要走的更远,点击我 赞助。 如果还有疑问,点击我加群,为你提供最好的解答。


工具导航地图