我想动态生成 JSON(从 JavaScript),其中包含如下值:
["\u1234", "\u4321", ...]
如何生成给定的代码?
const letter_a = "a".codePointAt(0).toString(16).padStart(4, '0').toUpperCase()
const unicode = `\\u${letter_a}`
这不起作用,序列化为 JSON 会给出:
["\\u1234", "\\u4321", ...]
有没有办法动态生成这种数据,必须手写?
我想避免像
["ॆ"]
一样直接在JSON中绘制字形,因为组合字符等会变得混乱。所以我希望动态地写出 \u1234
代码点。
啊哈,我想我可以做到这一点:
JSON.stringify(points, null, 2).replace(/\\\\/g, '\\')
但是有更好的方法吗?
"\u0061"
(长度:1)是unicode文字,相当于"a"
("\u0061" == "a"
-> true
)。 "\\u0061"
(长度:6)实际上是字面意思 \u0061
,它只有一个反斜杠,这就是您在浏览器控制台中看到的样子。
如果您想将字符串转换为 unicode 表示数组,并在某个时候将其转换回来,您可以执行以下操作:
const text = 'Hello, world!';
// store it in format of `\uFFFF`
const unicodes = [...text].map(char => '\\u' + char.codePointAt().toString(16).toUpperCase().padStart(4, 0));
console.log(unicodes);
// restore the unicode array
const literal = unicodes.map(unicode => String.fromCharCode(parseInt(unicode.replace(/^\\u/, ''), 16))).join('');
console.log(literal);