我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Node.js抓取网站中文乱码解决办法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Node.js抓取网站中文乱码解决办法

问题:Node.js抓取网站中文乱码

async function getHtml(){
    let res = await axios.get(publicPath+"/pic/")
    console.log(res)
}

如上代码,axios默认是以utf8的方式去解码html
由于原网页的编码方式是gb2312 控制台打印中文乱码

_G��ԭ��_����ͼƬ��</b></a> </h3>\r\n' +
'<p> ������ĩ�ա������ף��ܽ��׵�һ����־�ϸ裬����ĩ�ռ��������ף�G����������ͼƬ�ף��׳���Ϊ�����Ǹ����ϴ��� ���������
����������Σ����Ÿ��Լ�һЩ��������Ҫ�ñ��˰�����������״ݻ١��ܽ�������һ�ײ�ͬ����... </p>\r\n' +
`<span class="spanimg1">���ࣺ

Node.js抓取网站中文乱码解决办法

stream尝试了很多种方式都无效,最后想到流请求

我们以流的方式去请求网页,因为流都是二进制数据,当我们获取到所有的二进制数据后,将其以原网页的编码方式去解码即可!

步骤
1.引入 iconv-lite
npm i iconv-lite

const axios = require('axios')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')
//封装请求html方法
async function getHtml(url){
    let res = await axios.get(
         url,{
         responseType: 'stream'
    })
    return new Promise(resolve=>{
        let chunks = []
        res.data.on('data',chunk=>{
            chunks.push(chunk)
        })
        res.data.on('end',()=>{
            let buffer = Buffer.concat(chunks)
            let str = iconv.decode(buffer,'gb2312')
            resolve(str)
        }) 
    })
}

getHtml用于发送流请求
在函数内部封装了promise,
promise里面的res.data是一个可读流当获取到流数据时,我们及将其添加到chunks数组。
流数据获取完毕后,将二进制数据连接,并设置解码方式为gb2312
最好用cheerio封装一下

async function getData(){
    const html = await getHtml(publicPath+"/pic/")
    const $ = cheerio.load(html)
    console.log($.html())
}
getData()

解码后的数据

七里香》吉他谱,周杰伦的经典代表作品,七里香吉他六线谱,原调bE选调C,CAPO夹三品,完整版共五张弹唱图
片谱。感谢老姚吉他编配,并同步《七里香》吉他弹唱教学视频,琴友们可以跟随老师的示范讲解练习起来。 曲... </p>
<span class="spanimg1">分类: <a href="/geshou/Cdiaodanchangpu_1258_1.html" rel="external nofollow"  target="_blank">C调弹唱谱</a>  <a href="/geshou/jitajiaoxueshipin_5348_1.html" rel="external nofollow"  target="_blank">吉他教学视频</a>  </span> <span class="spanimg2">来源:未知 </span> <span class="spanimg3">2020-12-25</span>

以上就是Node.js抓取网站中文乱码解决办法的详细内容,更多关于Node.js抓取网站中文乱码解决办法的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Node.js抓取网站中文乱码解决办法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Node.js抓取网站中文乱码解决办法

这篇文章主要介绍了Node.js抓取网站中文乱码解决办法,需要的朋友可以参考下
2023-02-18

Node.js抓取中文网页乱码问题和解决方法

Node.js 抓取非 utf-8 的中文网页时会出现乱码问题,比如网易的首页编码是 gb2312,抓取时会出现乱码var request = require('request') var url = 'http://www.163.co
2022-06-04

VB.NET中抓取网页乱码怎么办

这篇文章将为大家详细讲解有关VB.NET中抓取网页乱码怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。举一个小案例如下。以下为VB.Net抓取网页的函数LobDotCn 注:url_Link为抓取的
2023-06-17

Python中matplotlib中文乱码解决办法

Matplotlib是Python的一个很好的绘图包,但是其本身并不支持中文(貌似其默认配置中没有中文字体),所以如果绘图中出现了中文,就会出现乱码。 matplotlib绘制图像有中文标注时会有乱码问题。实例代码:import matpl
2022-06-04

java读取中文乱码解决方法

Java读取文本文件(例如csv文件、txt文件等),遇到中文就变成乱码。读取代码如下:List lines=new ArrayList(); BufferedReader br = new BufferedReader(new FileReader(f
java读取中文乱码解决方法
2018-10-05

LoadRunner中文出现乱码的解决办法

录制选项,高级,支持字符集,UTF-8。一般情况下不需要开启此选项,否则在Submit里会出现有乱码。如果未开启此功能还出现乱码,可尝试开启此选项。如果开启此选项还是有乱码,且乱码处的内容你需要进行参数化,可使用lr_convert_str
2023-06-05

php读取word乱码的解决办法

这篇文章将为大家详细讲解有关php读取word乱码的解决办法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、打开相应的PHP代码文件。2、通过com调用word组件,代码如“new COM
2023-06-25

java中FileOutputStream中文乱码问题解决办法

java中FileOutputStream中文乱码问题解决办法使用FileOutputStream序列化可以直接向文件写入文本内容,代码如下:FileOutputStream outStream = new FileOutputStream
2023-05-31

node.js输出中文乱码如何解决

这篇文章主要介绍“node.js输出中文乱码如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node.js输出中文乱码如何解决”文章能帮助大家解决问题。node.js输出中文乱码的解决办法:1
2023-07-04

PHP json_encode中文乱码问题的解决办法

这篇文章介绍了PHP json_encode中文乱码问题的解决办法,有需要的朋友可以参考一下
2022-11-15

Linux 中unzip解压时中文乱码的解决办法

Linux 中unzip解压时中文乱码的解决办法 当我们在linux中解压一个含有中文名字的压缩包如“资料.zip”时,如果直接使用如下的命令,将会出现中文乱码。unzip 资料.zip主要的原因是因为unzip在解压的时候会将编码转化为其
2022-06-04

Android Retrofit 中文乱码问题的解决办法

Android Retrofit 中文乱码问题的解决办法使用retrofit和rxjava,提交数据时需注意,当数据中有中文时,传到后台,可能会是乱码,需处理:解决:1.GET请求改成POST;2.参数Field改成Query3.加上@Fo
2023-05-30

java读取文件中文乱码解决方法介绍

Java读取文本文件(例如csv文件、txt文件等),遇到中文就变成乱码。(推荐:java视频教程)读取代码如下:List lines=new ArrayList(); BufferedReader br = new BufferedReader(new
java读取文件中文乱码解决方法介绍
2020-12-12

php中var_dump乱码的解决办法

这篇文章将为大家详细讲解有关php中var_dump乱码的解决办法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php var_dump乱码的解决办法:1、打开chrome浏览器,依次选择“选项-更多工具
2023-06-14

PHP中文乱码分类及解决办法大全

PHP+MYSQL做网站开发通常都会碰到浏览器输出中文字符时乱码,这个问题的原因主要是因为HTML内容编码,PHP文件编码和MySQL数据库编码这三者不一致造成的。下面我们以UTF-8为例简述一下如何统一这三者之间的关系。新增一个PHP文件
2022-05-19

oracle中文乱码解决方法

oracle 中文乱码通常由字符集错误引起。解决步骤如下:检查数据库字符集,应为 utf8。修改字符集为 utf8。检查客户端字符集,应与数据库一致。验证字符集已更改。重新加载数据,指定字符集为 utf8。解决 Oracle 中文乱码Or
oracle中文乱码解决方法
2024-05-11

java读取txt文件乱码解决方法

java读取txt文件,如果编码格式不匹配,就会出现乱码现象。所以读取txt文件的时候需要设置读取编码。txt文档编码格式都是写在文件头的,在程序中需要先解析文件的编码格式,获得编码格式后,在按此格式读取文件就不会产生乱码了。(推荐:java视频教程)java
java读取txt文件乱码解决方法
2016-06-11

编程热搜

目录