JS中使用node-fetch读取URL数据时如何将特殊字符转为unicode-escape格式
非ASCII字符批量转Unicode转义格式实现方案
核心思路
无需手动遍历对象字段、也不需要维护特殊字符替换表,仅需对JSON序列化后的字符串做一次批量正则替换,即可自动将所有非ASCII字符转换为目标格式。
修改后的实现代码
const fetch = require("node-fetch"); var result = {} fetch(url) .then(res => res.json()) .then(json => { // 核心转义逻辑:自动匹配所有非ASCII字符 result = JSON.stringify(json).replace(/[\u0080-\uffff]/g, char => `\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}` ); });
逻辑说明
- 正则
/[\u0080-\uffff]/g会自动匹配所有超出ASCII范围(0x00-0x7F)的字符,覆盖í、ř这类特殊字符,无需手动指定替换列表 - 匹配到的字符会自动读取其Unicode编码,转成16进制后补全为4位长度,最终拼成
\uXXXX的标准转义格式,比如í的编码为0xED,会自动转为\u00ed - 仅对最终序列化完成的JSON字符串做一次替换,不需要递归遍历对象的每个字段,执行效率更高
拓展适配方案
全Unicode字符支持
如果你的场景需要支持emoji这类超出BMP范围的特殊字符,可以将转义逻辑替换为支持全码点的版本:
result = JSON.stringify(json).replace(/[^\u0000-\u007F]/gu, char => `\\u${char.codePointAt(0).toString(16).padStart(4, '0')}` );
这个版本会匹配所有非ASCII字符,适配所有Unicode场景。
保留对象结构输出
如果你需要保留result为对象结构(而非JSON字符串),可以在替换完成后再调用JSON.parse转回对象即可,此时对象字段里存储的就是转义后的字面字符串内容:
.then(json => { const escapedStr = JSON.stringify(json).replace(/[\u0080-\uffff]/g, char => `\\\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}` ); result = JSON.parse(escapedStr); });
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

