爬取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)处理字符集问题解决相关推荐

  1. 解决:java.lang.NoSuchMethodException: gentle.entity.User.<init>()

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 运行程序报错: java.lang.NoSuchMethodException: gentle ...

  2. (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的时候出现了这个错误 ...

  3. Cannot autogenerate id of type java.lang.Integer for entity

    在直接对MongoDB中插入实体对象的时候出现了 Cannot autogenerate id of type java.lang.Integer for entity org.springframe ...

  4. Java:bean、entity、model、domain区别与作用

    bean 包含的都是 JavaBean. JavaBean 是一种 Java 语言写成的可重用组件.为写成 JavaBean,类必须是具体和公共的,并且具有无参数的构造器.JavaBean 通过提供符 ...

  5. MongoDB-Cannot autogenerate id of type java.lang.Long for entity of type

    错误 org.springframework.dao.InvalidDataAccessApiUsageException: Cannot autogenerate id of type java.l ...

  6. 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 ...

  7. java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 问题解决

    java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 问题解决 参考文章: (1)java.io.StreamCorrup ...

  8. Java中Arrays.toString ()打印二维数组及Array数组的常用操作

    1.Java中Arrays.toString () 已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类 ...

  9. java国际化——消息格式化+文本文件和字符集

    [0]README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java国际化--消息格式化+文本文件和字符集 的基础知识 : 2) 由于本文 ...

  10. Java布尔类toString()方法及示例

    Syntax: 句法: public String toString(); public static String toString(boolean value); 布尔类toString()方法 ...

最新文章

  1. (转载)星期几问题——蔡勒公式
  2. 探秘Tomcat——连接篇
  3. 两个时间计算毫秒在线_SPL 的日期时间函数(下)
  4. drf-频率组件 权限组件
  5. VMware虚拟机安装Ubuntu
  6. React之mockjs+sass+生命周期函数
  7. 如何防止通过url攻击_什么是XSS攻击?如何防御XSS攻击?
  8. 膜拜大丹(结论+二元环)
  9. 小程序开发(4)-之登录
  10. auto.js 实现信息发送、QQ点赞、微信点赞、健康日报签到
  11. java cpu高_Java中的CPU占用高和内存占用高的问题排查
  12. C\C++不经意间留下的知识空白------宏
  13. python绘制拟合回归散点图_Python之简单线性回归
  14. app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
  15. linux下的shell脚本(基本)
  16. 基于天地图标点html教程,天地图WEB API入门指导
  17. Appium国内下载地址
  18. HTML简易会员登录页面
  19. 怎么看虚拟机服务器ip,虚拟主机的ip怎么看 查看主机ip的方法
  20. 真牛皮!手把手教你写Android项目文档,内含福利

热门文章

  1. 熵值法原理、应用及其Python实现
  2. python处理can协议文件_二、如何解决:python:Can't reopen .pyc file
  3. 知乎live-李笑来-人人都能用英语-笔记
  4. iOS pch文件配置
  5. 在excel中批量插入分页符
  6. 温习2021年 Java 面试题汇总【100题】
  7. 【 FlutterUnit 食用指南】 开源篇
  8. mac下使用自带的bash或Cyberduck软件链接服务器
  9. 探讨下app的包为什么抓不到
  10. 教你提取图片中文字的四种方法