Node.js Axios 爬取 HTML 中文乱码解决方案

作者:慢半拍

时间:2026-10-25

浏览:179

本文介绍使用 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 中文乱码的资料,请关注本站其他相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章