要转义不在Basic Multilingual Plane中的代码点,该字符表示为十二个字符的序列,编码UTF-16代理对。因此,例如,只包含G谱号字符(U + 1D11E)的字符串可以表示为
"\uD834\uDD1E"
。
ECMA-404:The JSON Data Interchange Format
我相信there is no need to encode this character at all,因此可以直接表示为""
。但是,如果有人希望对其进行编码,则根据规范,它必须编码为"\uD834\uDD1E"
,而不是(看起来合理)"\u1d11e"
。这是为什么?
答案 0 :(得分:3)
JSON的一个关键架构特性是,JSON编码的对象是可以使用eval
函数评估的有效Javascript文字。遗憾的是,较旧的Javascript实现仅支持16位Unicode转义序列,在字符串文字中包含四个十六进制字符,因此除了在转义序列中以可移植方式使用0xFFFF以上的代码点时,没有其他方法可以使用UTF-16代理。 (允许任意代码点的\u{...}
语法仅在ECMAScript 6中引入。)
但正如您所提到的,如果您的应用程序支持Unicode JSON文本,则无需使用转义序列。只需直接以相应的Unicode格式对字符进行编码。