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

JSON 2017-05-13 21:28:49 46807

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("https://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", "https://www.sojson.com");

//TODO --- 

哦了,还有问题加群交流吧!QQ群:259217951。

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/225.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

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

关于作者
一个低调而闷骚的男人。
相关文章
Jsoup 提交参数乱码解决思路,解决过程及解决方案
JSOUP 教程JSOUP爬虫教程JSOUP超时分析与处理
JSOUP 教程JSOUP请求JSON ,JSOUP返回JSON 数据
Java爬虫,Jsoup 爬取大众点评、美团商家信息电话号码解决方案
JSOUP教程JSOUP的正确打开姿势。
JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser
N多系统单点登录,实现、解决方案。四种解决方案
Java 之 HTTP请求乱码解决,GZIP 返回值乱码解决
iTunes 没有“应用”这个选项解决方案
Springboot 集成Freemarker 自定义标签解决方案
最新文章
XML内部实体和外部实体 150
Java面向对象编程概念 111
PHP回显语句 91
Linux—文件树 116
C语言while循环和do while循环 131
Python元组剖析 200
MySQL触发器教程 314
sql使用布尔运算符和关系运算符 241
C语言的变量和常量 296
PostgreSQL:数据库角色 123
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 681984
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674719
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 602033
免费天气API,天气JSON API,不限次数获取十五天的天气预报 576900
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 552912
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509353
Elasticsearch教程(四) elasticsearch head 插件安装和使用 479975
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 264502
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244246
Elasticsearch教程(一),全程直播(小白级别) 225569
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...