You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON中的Unicode代理对是否真的存在两种解读方式?

关于ECMA-404 JSON标准中Unicode代理对规定的疑问

官方JSON标准(ECMA-404,第2版,2017年12月)关于Unicode代理对的规定如下:

不过,JSON文本处理器是将此类代理对解读为单个代码点,还是作为显式代理对处理,这是由具体处理器决定的语义决策。

这句话到底是什么意思?

请注意,同一文档的前文还规定:

任何代码点都可以表示为十六进制转义序列。此类十六进制数的含义由ISO/IEC 10646确定。如果代码点位于基本多语言平面(BMP)[...]。[...] 要转义不在基本多语言平面内的代码点,该字符可表示为一个12字符序列,对应该代码点的UTF-16代理对进行编码。

这种措辞糟糕且令人困惑:如果标准强制要求UTF-16的语义解读——因为

  • 它只允许恰好4位十六进制数字的Unicode转义序列\uhhhh(即2字节),并且
  • 它提到了代理对

——其中基本多语言平面(BMP)以上的Unicode代码点用两个2字节代码单元表示,而非单个代码点,那为何不在提及ISO/IEC 10646之后、讨论BMP字符之前就提到UTF-16,而是在非BMP字符的相关文本中才提及?(显然BMP代码点也隐含采用UTF-16。标准不太可能允许不含非BMP代码点的文档采用非UTF-16字符编码。)

回到之前关于代理对解读的句子:如果我的理解正确,它允许JSON处理器选择(a)将JSON中的2字节代码单元序列保留为等长的代码单元序列,或者(b)将其转换为可能更短的代码点序列。

但这就像说JSON处理器读取JSON值后,可以将数字存储为double类型或string类型——并非什么深刻的表述。另外,同一标准文档强调它不对任何JSON值强加特定语义解读(不过“此类十六进制数的含义由ISO/IEC 10646确定”这段文本似乎构成了部分例外)。值得注意的是,RFC 8259中没有类似的关于代理对的措辞。

或者,那句引述的句子是否有更深层的含义?

内容的提问来源于stack exchange,提问作者Lover of Structure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:43:26