nodejs+axios爬取html出现中文乱码并解决示例
目录
- 一、乱码原因
- 二、解决办法
一、乱码原因
当使用 nodejs + axios 来爬取某个 url 对应的 html 时,出现中文乱码。
在 HTML 页面的 head 中没有设置 <meta charset="UTF-8"> ,而 html 页面默认是 GBK 的编码。
使用 axios 发送请求 responseEncoding 默认是 utf8,造成编码不一致,导致最后获取到的 html 内容出现中文乱码。
二、解决办法
以二进制流的形式获取 HTML 内容,再对内容进行 GBK 编码解析。具体步骤如下:
- 设置 axios 请求时的 responseType 为 arraybuffer;
- 使用 TextDecoder 对象提供的方法对二进制流进行编码解析。
eg:
async function getHtml() { let res = await axios({ url: "http://www.xxx.com", headers: { // ... }, responseType: "arraybuffer", // 关键步骤 responseEncoding: "utf8", }); let { data } = res let utf8decoder = new TextDecoder("GBK"); // 关键步骤 let html = utf8decoder.decode(data); console.log(html) }
这样就能完美解决中文乱码的情况了。如果 HTML 设置的其他类型编码,只需要在 new TextDecoder() 实例化参数传入对应的编码即可。
API解读:
TextDecoder 接口表示一个文本解码器,一个解码器只支持一种特定文本编码,例如: utf-8、iso-8859-2、koi8、cp1261,gbk 等等。解码器将字节流作为输入,并提供代码点流作为输出。
以上就是nodejs+axios解决html出现中文乱码示例的详细内容,更多关于nodejs axios解决html中文乱码的资料请关注我们其它相关文章!
相关推荐
-
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
前言 我的项目中有一个需求:点击按钮生成可编辑的word文档订单详情的信息 我使用的前端框架是Vue.js.后台使用的是node.js node.js生成和导出word文档我参考的是下面这两篇文章,写的挺好的(github上的那篇里面还有node.js生成word.excel.ppt的example,需要详细的可以看里面) https://www.jb51.net/article/144769.htm https://github.com/Ziv-Barber... 问题 node.js上面这两
-
node+axios实现下载外网文件到本地
目录 引言 初始化项目 安装axios 实现逻辑 执行 引言 作为一个web前端开发,对axios肯定不陌生,但是在前端开发中,一般是使用axios来请求后端接口,获取数据.而使用node+axios下载网络文件到本地磁盘可能很少接触,搜索了很多相关的博客文章,讲解的好像都不够清晰明了,所以本文就记录一下实践方法. 初始化项目 npm init -y 安装axios npm i -S axios 实现逻辑 根目录下新建app.js // app.js const axios = require(
-
详解Vue+axios+Node+express实现文件上传(用户头像上传)
Vue 页面的代码 <label for='my_file' class="theme-color"> <mu-icon left value="backup"></mu-icon> 修改头像 </label> <input type="file" ref="upload" name="avatar" id='my_file' style="d
-
node.js中axios使用心得总结
Axios是一个基于Promise的 HTTP 库,可以用在浏览器和node.js 中,因为尤大大的推荐,axios也变得越来越流行.最近项目中使用axios也遇到了一些问题,就借此机会总结一下,如有错误,还请不吝指正. 功能 浏览器端发起XMLHttpRequests请求 node层发起http请求 支持Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防御XSRF(跨站请求伪造) 兼容 使用 npm npm install axios bo
-
node.js通过axios实现网络请求的方法
1.使用Npm 下载axios npm install --save axios var update_url = axios.create({ baseURL:'debug url' }); update_url.get('/debug url').then(function (response){ //response 就是请求url 返回的内容 } 上述的方法请求文件时候,body的默认格式不是form-data.因此我们需要请求的数据格式为form-data的时候,需要使用下面的库 re
-
node+axios实现服务端文件上传示例
目录 一.接口文档介绍 二.文件上传 2-1.初始化项目 2-2.安装插件依赖 2-3.上传核心代码 2-4.执行脚本 最近调研企业wx集成H5应用,其中有一个发送图文消息,需要上传图片到临时素材库.之前做过文件上传到阿里云.七牛云都是服务端提供封装好的文件上传接口,在客户端使用ajax的方式上传.所以就来踩踩坑,使用node+axios实现服务端文件上传. 一.接口文档介绍 请求方式:POST(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/me
-
nodejs+axios爬取html出现中文乱码并解决示例
目录 一.乱码原因 二.解决办法 一.乱码原因 当使用 nodejs + axios 来爬取某个 url 对应的 html 时,出现中文乱码. 在 HTML 页面的 head 中没有设置 <meta charset="UTF-8"> ,而 html 页面默认是 GBK 的编码. 使用 axios 发送请求 responseEncoding 默认是 utf8,造成编码不一致,导致最后获取到的 html 内容出现中文乱码. 二.解决办法 以二进制流的形式获取 HTML 内容,再
-
Java @Value("${xxx}")取properties时中文乱码的解决
@Value("${xxx}")取properties时中文乱码 (1)检查spring的配置文件中,properties的配置编码是否正确. (2)检查你要读取的.properties文件,编码是否正确.可以使用编辑器修改编码,或者文件另存为修改编码为UTF-8 @Value注解为属性赋值的时候出现乱码 在使用@Value注解为属性赋值的时候遇到乱码问题,记录一下解决方案 方案1.配置资源加载 项目是使用spring boot,在启动类的@PropertySource注解中加入(en
-
nodejs实现爬取网站图片功能
通过实例给大家讲解nodejs实现爬取网站图片功能,以下就是全部内容: 原理: 爬虫是最明显的IO密集型应用场景,显然用node,使得I/O等待开销小数据挖掘比较方便 借助express模块来搭建node服务 并使用request模块获取目标页面的html代码 下载cheerio模块对html代码做处理(cheerio类似jQuery的语法,所以好用又方便) 环境配置: npm install express request cheerio --save (1)引入各个模块 var http =
-
MySql中表单输入数据出现中文乱码的解决方法
MySQL会出现中文乱码的原因在于 1.server本身设定问题,一般来说是latin1 2.建库建表时没有制定编码格式. MySql中表单输入数据出现中文乱码的解决方法: 1.建库的时候 CREATE DATABASE test CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 2.建表的时候 CREATE TABLE content ( text VARCHAR(100) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
-
MySQL从命令行导入SQL脚本时出现中文乱码的解决方法
本文实例讲述了MySQL从命令行导入SQL脚本时出现中文乱码的解决方法.分享给大家供大家参考,具体如下: 在图形界面管理工具 MySql Query Browser中打开脚本(脚本包括建库.建表.添加数据),并执行,不会有任何问题:但是使用mysql命令行工具执行建库脚本时,添加数据中如果包含中文,存入的数据就是乱码或是???... 解决方法1:在MySql安装目录下找到my.ini,将[mysql]下的default-character-set=latin1改为default-characte
-
PHP读取mssql json数据中文乱码的解决办法
PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. 解决办法如下: 这样,sql server 2008中的中文就可以在网页正常显示了. 如果要将中文正常插入到sql server 2008中,还要加入一条代码:$query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文
-
iOS读取txt文件出现中文乱码的解决方法
一.情景描述: 后台给一个txt文件,编码是utf-8,在Mac电脑Xcode开发环境下读取txt文件内容,汉字会出现乱码,英文没有乱码这种情况. 二.尝试解决方法: 修改编码格式,尝试了NSUTF16StringEncoding,NSUTF8StringEncoding,NSASCIIStringEncoding编码等,出现的问题有时是中文乱码,有时是utf-8不能打开文件问题,最终问题都没能解决. 三.猜测原因: txt文件是从window电脑上创建,有可能和环境有关,第二,编码问题. 四.
-
Java读取properties配置文件时,出现中文乱码的解决方法
如下所示: public static String getConfig(String key) { Properties pros = new Properties(); String value = ""; try { pros.load(new InputStreamReader(Object.class.getResourceAsStream("/properties.properties"), "UTF-8")); value = pr
-
PHP MPDF中文乱码的解决方式
废话不多说了,直接奔入主题了. 推荐教程:PHP使用MPDF类生成PDF的方法 1.config.php文件,大约67行: $this->autoLangToFont = true; 2.使用的时候 注意, +aCJK 这个参数,而不是 c这个参数 $mpdf=new \mPDF('+aCJK','A4','','',32,25,27,25,16,13); $mpdf->WriteHTML($content); $mpdf->Output(); 然后就输出中文了 这个针对版本mPDF6
-
php生成二维码时出现中文乱码的解决方法
本文实例讲述了php生成二维码时出现中文乱码的解决方法.分享给大家供大家参考.具体分析如下: 最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个类型没有内容,随即判断没内容就加上一个固定的字符串,这样乱码的问题得以解决. php生成二维码的几种方式 1.google开放api,代码如下: 复制代码 代码如下: $urlToEncode="http://www.
随机推荐
- fso asp生成静态html的代码
- jQuery中校验时间格式的正则表达式小结
- IIS6下PHP的ISAPI和FastCGI性能比较 期待ii7
- 几种经典排序算法的JS实现方法
- js获取网页高度(详细整理)
- php数组合并与拆分实例分析
- Zend的MVC机制使用分析(一)
- 基于JavaScript实现无缝滚动效果
- python日志记录模块实例及改进
- C++学习小结之二进制转换
- C++中的循环引用
- javascript版2048小游戏
- VC动态生成菜单项的实现方法
- Powershell小技巧之等待输入一个按键
- Android中如何获取视频文件的截图、缩略图
- 详解Java动态代理的实现机制
- .net输出重写压缩页面文件的小例子
- 网页实时显示服务器时间和javscript自运行时钟
- php中选择什么接口(mysql、mysqli)访问mysql
- php组合排序简单实现方法