问题描述
我正在使用 node-fetch
从 URL 读取数据。返回结果是完美的,只是它与我的首选结果不同。
对于某些特殊字符,如 í
或此 ř
,我希望它采用以下格式:u00ed
和 u0159
。
是否可以在不查找字符并手动替换它的情况下实现类似的功能?
这是我的代码:
const fetch = require("node-fetch");
var result = {}
fetch(url)
.then(res => res.json())
.then(json => result = json);
我的json结果:
{"title":"Adopce zvířat"}
我想要的不是上面的结果:
{"title":"Adopce zv\\u00ed\\u0159at"}
这一定很奇怪,但出于某种原因,我想要那样。
解决方法
来自 GitHub Gist User josephrocca 的这个函数找到 here on GitHub Gist 将所有 non-ASCII
字符替换为那里的 unicode 转义字符串。
function escapeUnicode(str) {
return [...str].map(c => /^[\x00-\x7F]$/.test(c) ? c : c.split("").map(a => "\\u" + a.charCodeAt().toString(16).padStart(4,"0")).join("")).join("");
}
该函数在分割后匹配所有非 ASCII 字符 字符串以“unicode-safe”方式(使用`[...str]`)。然后拆分每个 unicode 字符到它的代码点,并得到转义码 对于每个,然后加入所有的 ASCII 字符和 Unicode 转义为一个字符串。
[...]
基于此线程中的讨论:https://gist.github.com/mathiasbynens/1243213
,您可以使用 jsesc
包:
const jsesc = require('jsesc');
jsesc('Ich ♥ Bücher'); // → 'Ich \\u2665 B\\xFCcher'
jsesc('foo ? bar'); // → 'foo \\uD834\\uDF06 bar'
来自 Github 上的 Documentation