You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hapi、axios、cheerio爬取ISO-8859-1站点时JSON输出编码错误如何解决

问题根因

你当前的乱码核心是axios默认会自动将响应体按UTF-8编码转为字符串,此时原始二进制数据已经被错误转码,后续再做ISO-8859-1转换也无法恢复原始正确内容。

可行解决方案

步骤1:配置axios返回原始二进制缓冲

调用axios.get时添加responseType: 'arraybuffer'参数,强制返回原始Buffer,避免axios自动按UTF-8转码:

const response = await axios.get(url2Get, {
  responseType: 'arraybuffer'
});

步骤2:使用iconv-lite正确解码

直接对返回的原始Buffer做解码,不需要先转字符串再转Buffer:

const iconv = require('iconv-lite');
// 若解码后还有小概率乱码,可以尝试把'ISO-8859-1'替换为'win1252',很多老站点实际用的是Windows-1252编码
const html = iconv.decode(response.data, 'ISO-8859-1');

步骤3:加载到cheerio处理

const $ = cheerio.load(html, { decodeEntities: false });
// 后续正常提取节点内容即可,比如$('.name').text()拿到的就是正常的"DÓLAR BNA"

补充验证点

如果按上述操作仍有乱码,可先打印解码后的html字符串,确认解码环节是否正常:如果html里的文字已经正确,那就是后续Hapi返回响应时的编码问题,需要给Hapi的响应头设置content-type: application/json; charset=utf-8,确保返回JSON时编码正确。

内容的提问来源于stack exchange,提问作者Enrique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:30:05