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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 16:36:08