java entity tostring_EntityUtils.toString(entity)处理字符集问题解决
爬取51job和猎聘网的信息,想处理字符集问题(51job为gbk,猎聘为utf-8),
找到两个网站字符集信息都在同一标签下
就想先把网页保存成string,解析一遍获取字符集,然后将网页转换成对应的正确的字符集,最后再转换成统一的字符集utf-8
1.0实现,2次调用entity.utils.tostring方法
closeablehttpresponse httpresponse = httpclient.execute(httpget);
if(httpresponse.getstatusline().getstatuscode() == 200) {
//网站转为string
string get_charset_entity2string = entityutils.tostring(httpresponse.getentity());
//解析
document get_charset_document = jsoup.parse(get_charset_entity2string);
//字符集信息提取,51job和猎聘
string charset = get_charset_document.select("meta[http-equiv=content-type]")
.attr("content").split("=")[1];
system.out.println(charset);
//根据字符集重新编码成正确的
string ori_entity = entityutils.tostring(httpresponse.getentity(),charset);
//转换为统一的utf-8
string entity = new string(ori_entity.getbytes(),"utf-8");
system.out.println(entity);
{
报错
参考 https://blog.csdn.net/qq_23145857/article/details/70213277
发现entityutils流只存在一次,但是有不想一个网页要连接两次,
这难不倒我,直接转换原来保留的string
2.0实现,第二次不使用entityutils
closeablehttpresponse httpresponse = httpclient.execute(httpget);
if(httpresponse.getstatusline().getstatuscode() == 200) {
//网站转为string
string get_charset_entity2string = entityutils.tostring(httpresponse.getentity());
//解析
document get_charset_document = jsoup.parse(get_charset_entity2string);
//字符集信息提取,51job和猎聘
string charset = get_charset_document.select("meta[http-equiv=content-type]")
.attr("content").split("=")[1];
system.out.println(charset);
//根据字符集重新编码成正确的,不用entityutils,直接转get_charset_entity2string
string ori_entity = new string(get_charset_entity2string.getbytes(), charset);
//转换为统一的utf-8
string entity = new string(ori_entity.getbytes(),"utf-8");
system.out.println(entity);
{
输出:
字符集依旧有问题,发现不指定字符集,entityutils.tostring()就用"iso-8859-1"字符集,可我就是不知道字符集
看到参考链接下面的解决办法,眼前一亮,把流直接以位数组保存,都能灵活变换
3.0实现,不使用entityutils.tostring,改用entityutils.tobytearray()
closeablehttpresponse httpresponse = httpclient.execute(httpget);
if(httpresponse.getstatusline().getstatuscode() == 200) {
//网站转换为byte[]
byte[] bytes = entityutils.tobytearray(httpresponse.getentity());
//byte列表转为默认字符集
string get_charset_entity2string = new string(bytes);
//解析
document get_charset_document = jsoup.parse(get_charset_entity2string);
//字符集信息提取,51job和猎聘
string charset = get_charset_document.select("meta[http-equiv=content-type]")
.attr("content").split("=")[1];
system.out.println(charset);
//根据字符集重新编码成正确的
string ori_entity = new string(bytes, charset);
//转换为统一的utf-8
string entity = new string(ori_entity.getbytes(), "utf-8");
system.out.println(entity);
}
对于里面的默认字符集
参考:https://blog.csdn.net/wangxin1949/article/details/78974037
1、如果使用了eclipse,由java文件的编码决定
2、如果没有使用eclipse,则有本地电脑语言环境决定,中国的都是默认gbk编码,
只要没有改变英文的编码,就没有影响,只要能从标签里提取出charset字符集就可以转换成正确的
输出正常
换成猎聘的url再尝试
完美,爬虫的字符集真神奇
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
java entity tostring_EntityUtils.toString(entity)处理字符集问题解决相关推荐
- 解决:java.lang.NoSuchMethodException: gentle.entity.User.<init>()
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 运行程序报错: java.lang.NoSuchMethodException: gentle ...
- (java.sql.SQLException: Cannot create com.entity.Book: com.entity.Book ...: [1]解决方案)
(java.sql.SQLException: Cannot create com.entity.Book: com.entity.Book -: [1]解决方案) 在学习jdbc的时候出现了这个错误 ...
- Cannot autogenerate id of type java.lang.Integer for entity
在直接对MongoDB中插入实体对象的时候出现了 Cannot autogenerate id of type java.lang.Integer for entity org.springframe ...
- Java:bean、entity、model、domain区别与作用
bean 包含的都是 JavaBean. JavaBean 是一种 Java 语言写成的可重用组件.为写成 JavaBean,类必须是具体和公共的,并且具有无参数的构造器.JavaBean 通过提供符 ...
- MongoDB-Cannot autogenerate id of type java.lang.Long for entity of type
错误 org.springframework.dao.InvalidDataAccessApiUsageException: Cannot autogenerate id of type java.l ...
- Cannot autogenerate id of type java.lang.Integer for entity of type com.mongodb.pojo.User!
第一次尝试使用MongoDB对实体进行插入操作,结果出现 Cannot autogenerate id of type java.lang.Integer for entity of type com ...
- java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 问题解决
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 问题解决 参考文章: (1)java.io.StreamCorrup ...
- Java中Arrays.toString ()打印二维数组及Array数组的常用操作
1.Java中Arrays.toString () 已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类 ...
- java国际化——消息格式化+文本文件和字符集
[0]README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java国际化--消息格式化+文本文件和字符集 的基础知识 : 2) 由于本文 ...
- Java布尔类toString()方法及示例
Syntax: 句法: public String toString(); public static String toString(boolean value); 布尔类toString()方法 ...
最新文章
- (转载)星期几问题——蔡勒公式
- 探秘Tomcat——连接篇
- 两个时间计算毫秒在线_SPL 的日期时间函数(下)
- drf-频率组件 权限组件
- VMware虚拟机安装Ubuntu
- React之mockjs+sass+生命周期函数
- 如何防止通过url攻击_什么是XSS攻击?如何防御XSS攻击?
- 膜拜大丹(结论+二元环)
- 小程序开发(4)-之登录
- auto.js 实现信息发送、QQ点赞、微信点赞、健康日报签到
- java cpu高_Java中的CPU占用高和内存占用高的问题排查
- C\C++不经意间留下的知识空白------宏
- python绘制拟合回归散点图_Python之简单线性回归
- app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
- linux下的shell脚本(基本)
- 基于天地图标点html教程,天地图WEB API入门指导
- Appium国内下载地址
- HTML简易会员登录页面
- 怎么看虚拟机服务器ip,虚拟主机的ip怎么看 查看主机ip的方法
- 真牛皮!手把手教你写Android项目文档,内含福利