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

NodeJS中如何将抓取到的乱码转换为ISO-8859-1?

解决Node.js request-promise抓取ISO-8859-1编码网站的乱码问题

嗨,这个问题我之前处理过不少次,核心原因是request-promise默认会把响应内容当作UTF-8解码,但你的目标葡语网站用的是ISO-8859-1(也叫Latin-1)编码,所以才会出现Alg�s这类乱码。之前你尝试的decodeURIComponent、escape这些方法是用来处理URI编码的,和HTTP响应体的字符编码问题不相关,自然解决不了。给你两个直接有效的方案:

方案一:直接指定响应编码为latin1

request-promise基于request库,而request支持通过encoding参数指定解码用的字符集。ISO-8859-1在Node.js里对应的编码名称就是latin1,直接设置这个参数就能让库自动帮你正确解码:

const rp = require('request-promise');

rp({
  uri: '你的目标葡语网站URL',
  encoding: 'latin1' // 关键:指定编码为ISO-8859-1对应的latin1
})
.then(htmlContent => {
  console.log(htmlContent); // 现在应该能正常显示葡语特殊字符了
})
.catch(error => {
  console.error('抓取出错:', error);
});

方案二:获取原始Buffer后手动解码

如果方案一没生效(比如网站响应头的编码标识不明确),可以先获取原始的二进制Buffer,再手动用latin1编码转换为字符串,这种方式更灵活:

const rp = require('request-promise');

rp({
  uri: '你的目标葡语网站URL',
  encoding: null // 告诉库不要自动解码,返回原始Buffer
})
.then(rawBuffer => {
  const decodedContent = rawBuffer.toString('latin1'); // 手动用ISO-8859-1解码
  console.log(decodedContent);
})
.catch(error => {
  console.error('抓取出错:', error);
});

额外提醒:你可以先检查一下目标网站的响应头Content-Type字段,如果它明确标注了charset=ISO-8859-1,那方案一肯定能直接解决问题;如果响应头没标,但meta标签里写了,方案二也能搞定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:05:25