JavaScript/Node.js中如何将£替换为£解决英镑符号乱码问题
Node.js request库英镑符号乱码问题解决方案
核心问题根因
你看到的£乱码是典型的编码解析不匹配问题:
英镑符号£的UTF-8编码为双字节0xC2 0xA3,如果request库默认按单字节编码ISO-8859-1(Latin-1)解析响应,会把两个字节分别映射为Â和£两个字符,最终呈现为乱码。
你之前用iconv解码不生效,大概率是没有关闭request的默认字符串转码,拿到的已经是转码错误的字符串,再做解码操作也无法恢复原始内容。
优先修复方案(比替换兜底更稳定)
先关闭request的自动编码转换,拿到原始响应Buffer后再按页面实际编码解码,示例代码如下:
const request = require('request'); const iconv = require('iconv-lite'); request({ url: '目标页面地址', encoding: null // 关键配置:不自动转字符串,返回原始Buffer }, (error, response, body) => { // 按页面实际编码解码,若页面是GBK等其他编码替换对应参数即可 const html = iconv.decode(body, 'utf8'); // 此时html内的£符号已正常解析,无乱码 })
兜底替换方案的问题修正
你现在替换后输出£字面量,以及替换不生效的问题,是两个错误导致的:
- 正则仅匹配
£,但实际乱码是£两个字符,匹配规则不命中 - 替换值写了
£,其中&是&的HTML实体,最终渲染会直接展示£字符串而非£符号
正确写法按场景选择即可:
- 若需要HTML页面渲染显示£符号,替换为HTML实体
£:
string.replace(/£/g, '£')
- 若需要直接得到£的纯文本字符,直接替换为
£字面量:
string.replace(/£/g, '£')
内容的提问来源于stack exchange,提问作者Strontium_99
相关产品推荐
相关产品推荐

