为了转义不在基本多语言平面中的代码点,字符被表示为一个十二字符序列,编码 UTF-16 代理对。因此,例如,仅包含 G 谱号字符 (U+1D11E) 的字符串可以表示为
"\uD834\uDD1E"
。
ECMA-404:JSON 数据交换格式
我相信根本不需要对这个字符进行编码,所以它可以直接表示为""
. 但是,如果希望对其进行编码,则必须按照规范将其编码为"\uD834\uDD1E"
,而不是(似乎合理)为"\u1d11e"
。为什么是这样?
为了转义不在基本多语言平面中的代码点,字符被表示为一个十二字符序列,编码 UTF-16 代理对。因此,例如,仅包含 G 谱号字符 (U+1D11E) 的字符串可以表示为
"\uD834\uDD1E"
。
ECMA-404:JSON 数据交换格式
我相信根本不需要对这个字符进行编码,所以它可以直接表示为""
. 但是,如果希望对其进行编码,则必须按照规范将其编码为"\uD834\uDD1E"
,而不是(似乎合理)为"\u1d11e"
。为什么是这样?
例如,JSON 的主要架构特性之一是 JSON 编码的对象是有效的 Javascript 文字,可以使用该eval
函数进行评估。不幸的是,较旧的 Javascript 实现仅支持 16 位 Unicode 转义序列,字符串文字中有四个十六进制字符,因此除了以可移植的方式在 0xFFFF 以上的代码点的转义序列中使用 UTF-16 代理之外别无他法。(\u{...}
允许任意代码点的语法仅在 ECMAScript 6 中引入。)
但正如您所提到的,如果您的应用程序支持 Unicode JSON 文本,则无需使用转义序列。只需将字符直接编码为相应的 Unicode 格式即可。