Node.js Axios 爬取 HTML 中文乱码解决方案
本文介绍使用 Node.js 和 Axios 爬取 HTML 页面时,因服务器编码(如 GBK)与 Axios 默认 UTF-8 不一致导致的中文乱码问题。通过设置 responseType 为 arraybuffer 并配合 TextDecoder 进行 GBK 解码,可有效解决该乱码现象。
一、乱码原因
在使用 Node.js 结合 Axios 抓取指定 URL 的 HTML 内容时,可能会遇到中文显示为乱码的情况。
这通常是因为目标 HTML 页面的 head 部分未声明 <meta charset="UTF-8">,且页面实际采用 GBK 编码。
Axios 发送请求时,responseEncoding 默认值为 utf8,这种编码方式与页面实际的 GBK 编码不匹配,从而导致最终获取的 HTML 内容出现中文乱码。
二、解决办法
解决思路是将 HTML 内容以二进制流形式获取,随后利用 GBK 编码规则对内容进行解析。具体操作如下:
- 配置 Axios 请求参数,将 responseType 设置为 arraybuffer;
- 利用 TextDecoder 对象提供的方法,对获取到的二进制流进行编码解析。
示例代码如下:
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 等)。该解码器以字节流作为输入,并输出代码点流。
以上即为 Node.js 结合 Axios 解决 HTML 中文乱码的示例详解,更多关于 Node.js 和 Axios 处理 HTML 中文乱码的资料,请关注本站其他相关文章!
Java和JavaScript名字像但没关系?详解两者及HTML的技术分工
2026-11-03 20:24:10
Node.js 中 CommonJS 与 ES Modules 模块规范的区别及使用
2026-11-03 15:35:13
先学JS还是先学Java?全栈开发视角的学习路径规划
2026-11-03 13:35:26
解决Node.js安装后提示“node不是内部或外部命令”
2026-11-03 08:39:43
生产环境升级 Node.js 的风险评估与 LTS 版本选择
2026-11-02 10:30:14
