JS、React Native环境下Windows-1252转UTF-8乱码问题求解
编码转码失败原因
你当前的操作存在两个核心错误:
- 拿到的
responseData已经被HTTP请求客户端默认按UTF-8解码为字符串,原始的二进制字节信息已经损坏,此时再用Buffer.from(responseData)重建的缓冲区并不是接口返回的原始编码字节 - 你给出的乱码是俄文内容,对应编码为Windows-1251(西里尔编码),不是你用的Windows-1252(西欧编码),编码类型匹配错误自然转码失败
正确实现方案
1. 请求阶段获取原始二进制流
请求RSS接口时配置客户端不自动解码内容,直接返回原始二进制流,以常用的axios为例:
import axios from 'axios'; import { Buffer } from 'buffer'; import iconv from 'iconv-lite'; const rssResponse = await axios.get('你的RSS接口地址', { // 关键配置,直接返回ArrayBuffer格式的原始二进制数据 responseType: 'arraybuffer' });
2. 按正确编码解码
// 用原始响应数据创建Buffer const rawBuffer = Buffer.from(rssResponse.data); // 用Windows-1251解码,不要用Windows-1252 const correctText = iconv.decode(rawBuffer, 'win1251'); console.log(correctText);
转码验证
你给出的示例乱码Íîâîñòè Óëüÿíîâñêà按上述方法转码后,会得到正确俄文内容:Новости Ульяновска,符合新闻RSS的内容场景。
内容的提问来源于stack exchange,提问作者nmzgnv
相关产品推荐
相关产品推荐

