为什么JSON直接编码UTF-16代理对而不是Unicode代码点?
为了转义不在基本多语言平面中的代码点,该字符表示为十二个字符的序列,对UTF-16代理对进行编码。因此,例如,仅包含G谱号字符(U +
1D11E)的字符串可以表示为
"\uD834\uDD1E"
。
我认为根本不需要编码此字符,因此可以将其直接表示为"????"
。但是,如果希望对其进行编码,则必须按照规范将其编码为"\uD834\uDD1E"
,而不是(在合理的情况下)编码为"\u1d11e"
。为什么是这样?
回答:
JSON的关键体系结构特征之一是,JSON编码的对象是有效的Javascript文字,eval
例如,可以使用函数进行评估。不幸的是,较早的Javascript实现仅支持16位Unicode转义序列,字符串文字中包含四个十六进制字符,因此,除了以便携式方式对大于0xFFFF的代码点在转义序列中使用UTF-16替代符之外,没有其他方法。(\u{...}
仅在ECMAScript6中引入了允许任意代码点的语法。)
但是正如您提到的,如果您的应用程序支持Unicode JSON文本,则无需使用转义序列。只需将字符直接直接编码为相应的Unicode格式即可。
以上是 为什么JSON直接编码UTF-16代理对而不是Unicode代码点? 的全部内容, 来源链接: utcz.com/qa/418441.html