React Native中Fetch请求后如何处理字符编码问题?
在React Native中实现win1250转UTF-8解决接口返回乱码
直接用response.text()会出现乱码,因为Fetch默认按UTF-8解析响应内容,但你的接口返回的是win1250编码。要解决这个问题,得先获取原始二进制数据,再用编码处理库转成正确的UTF-8字符串,具体步骤如下:
1. 安装纯JS编码处理库
推荐使用iconv-lite,它是纯JavaScript实现,不需要配置原生依赖,直接适配React Native:
npm install iconv-lite
2. 修改Fetch请求逻辑
放弃response.text(),改用arrayBuffer()获取原始二进制数据,再通过iconv-lite解码:
import iconv from 'iconv-lite'; fetch('URL', { method: 'POST', headers: { 'Content-Type': 'text/xml', }, }) .then(response => response.arrayBuffer()) .then(buffer => { // 将ArrayBuffer转换为iconv-lite可处理的Buffer格式 const buf = Buffer.from(buffer); // 以win1250编码解码为正常UTF-8字符串 const decodedData = iconv.decode(buf, 'win1250'); console.log(decodedData); // 输出正确的Posteľ roštová }) .catch(err => console.error(err));
逻辑说明
你本地的处理是把乱码字符串按win1250编码转回二进制,再解码成UTF-8。在React Native里我们直接跳过“乱码字符串转二进制”的步骤,从接口拿到最原始的二进制数据后直接用win1250解码,从根源避免了乱码产生。
内容的提问来源于stack exchange,提问作者barnitestacc
相关产品推荐
相关产品推荐

