最近需要从某个网页上抓取数据。一波三折。

1. 先要找到网站页面调用后台数据服务的url地址,但是本人对js不了解,花了不少时间在分析其网页源代码的js部分,试图寻找出调用数据的链接。

后来得知浏览器都会追踪页面发出去的所有链接,chrome中,“F12->网络” 会显示所有的调用链接。读取后端数据的链接就在里面。

2. 找到url链接之后,接下来读取数据。

开始时用的是HttpGet类来读取,代码如下:

HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = null;
try {response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();body = EntityUtils.toString(entity);
} catch (IOException e) {e.printStackTrace();
}return body

但是在body中,总是会有乱码的出现,如在页面上显示的“凱”在程序中显示为乱码。在页面上请求头和响应头的内容,发现返回的字符集是“gb2312”,于是把代码改为

body = EntityUtils.toString(entity,“gb2312”);

但是仍然显示为乱码。

于是在网上(http://www.qqxiuzi.cn/bianma/zifuji.php)查询“凱”等乱码的字符集,发现“GBK”包含这些,而“GB2312”并不包含这些比较少见的字。看来是网页上的字符集信息不太对。

接着把代码修改为

body = EntityUtils.toString(entity,“gbk”);

还是有问题。。。

接着尝试在http头中加入“charset=gbk”,没有变化,服务端不支持。。。

3. 改为从网页读取字节流数据

上一步改完代码后仍然有问题,猜测是EntityUtils内部已经做好了转换。但是不知道怎么更进一步,所以打算从源头开始,接收字节流数据。

代码如下:

URL quest = new URL(url);
HttpURLConnection Connection = (HttpURLConnection).quest.openConnection();
InputStream is = Connection.getInputStream();
int len = 0;
byte[] temp = new byte[102400];
int llen = -1;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while ((llen = is.read(temp, 0, 102400)) != -1) {outStream.write(temp, 0, llen);
}
is.close();
content = new String(outStream.toByteArray(),"gbk");

用ByteArrayOutputStream接收byte数据,是为了防止中间被截断导致最后翻译目标字符集的时候出现错误。

这么使用的前提是要知道数据的字符集编码。

从结果往回看是一个简单的方法,但是之中的每一步都花费了不少精力才找到正确的方向,debug是个苦力活~~~

综上,看来最有效的方法是接收字节流,自己转成相应字符集编码格式。

转载于:https://www.cnblogs.com/starRebel/p/5630872.html

java网络流传输,中文乱码问题。相关推荐

  1. java 页面传输中文乱码解决方式

    post 中文乱码解决方案 接受数据的时候设置 request.setCharacterEncoding("utf-8");//编码必须和页面编码一致 页面设置 <%@pag ...

  2. ajax 传输中文乱码,关于Ajax请求中传输中文乱码问题的解决方案

    今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...

  3. Java的各种中文乱码解决方法

    Java的各种中文乱码解决方法 参考文章: (1)Java的各种中文乱码解决方法 (2)https://www.cnblogs.com/Survivalist/p/9015754.html 备忘一下.

  4. java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...

    JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...

  5. java: jsp:param中文乱码

    java: jsp:param中文乱码 假如a.jsp/b.jsp文件中 a.jsp代码: 需要加入:request.setCharacterEncoding("UTF-8")  ...

  6. java控制台打印输出 中文乱码 解决办法

    java控制台打印输出 中文乱码 解决办法 问题:IDEA控制台打印时出现中文乱码 原因:java资源的编码和ideal的不一致 解决办法: 第一步 1:打开intelliidea安装路径,Intel ...

  7. IDEA上Java项目控制台中文乱码

    目录 一.错误说明 二.解决方案 第一步,修改 idea64.exe.vmoptions 文件 第二步,修改 IDE 编码 第三步,添加 vm options 第四步,编辑自定义 vm options ...

  8. ajax中解决乱码的问题,关于Ajax请求中传输中文乱码问题的解决方案

    今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...

  9. java在Socket传输中文乱码解决思路及代码

    中文乱码产生的原因就是从GBK转到UTF-8,或者是不同的编码格式来回转,导致byte[]中存放的字节丢失. 思路是:在客户端进行传输前,将需要传输的字节,以一个编码方式进行传输,假设设置GBK,之后 ...

  10. java web中中文乱码问题汇总

    2019独角兽企业重金招聘Python工程师标准>>> 关于使用java 进行的javaweb开发时候的中文乱码的解决方法 如下是其中的内容: 1,jsp页面中文乱码 解决办法:文件 ...

最新文章

  1. html5 原生 弹窗,一起来看 HTML 5.2 中新的原生元素 dialog
  2. C++继承中的构造与析构
  3. Linux中查看正在使用的端口并强制删除占用端口
  4. kaios好用吗_印度 KaiOS操作系统有可能会成为世界第三大操作系统?
  5. html css导航栏字体图标,HTML+CSS入门之两种图标字体库
  6. Nodejs 分布式事务
  7. centos7进系统死机_电脑小白想学重装系统要怎么做?详细过程分享,学会远离电脑店...
  8. 查询接待收待飞地数量失败_中国有哪些飞地?
  9. 车是银色好还是白色好?
  10. cmd简单代码雨实现方法
  11. 关于DynamipsGUI
  12. 站在巨人的肩膀上,用Node+ChatGPT模块实现一个接口
  13. php md5算法,php如何实现md5算法?
  14. 用GAN的方法来进行图片匹配!休斯顿大学提出用于文本图像匹配的对抗表示学习,消除模态差异!
  15. 安装Bioperl最基本模块Bio::SeqIO
  16. 友盟+U-App全新升级,免费提供交互式即席分析能力,助力业务决策!
  17. Kubeadm部署Kubernetes1.18.6集群1
  18. 荣之学浅谈跨境电商选品!
  19. leetcode---二分搜索和BST【2020第一版】
  20. 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式

热门文章

  1. 服务器硬盘属于计算机哪一类,服务器和电脑虽然都是计算机,但却有很大区别,千万不要用错了...
  2. centos7 yum源_搭建内网Linux CentOS yum源,摆脱依赖包困扰
  3. MODE —— 输入一个数字,求从1加到该数的和(知识点:for循环嵌套while循环)
  4. bzoj 1572: [Usaco2009 Open]工作安排Job
  5. Window Server 2008 R2系统备份
  6. 关于SQL Server中索引使用及维护简介
  7. 成为软件架构师的4个过程
  8. 使用接口改变已经装箱的值类型的字段
  9. 图像分析:二值图像连通域标记
  10. python大佬养成计划----HTML网页设计一