为了转义不在基本多语种平面内的代码点,该字符使用UTF-16代理对进行编码,表示为一个十二个字符的序列。例如,只包含G谱号字符(U+1D11E)的字符串可以表示为
ECMA-404:JSON数据交换格式 我认为根本无需对此字符进行编码,因此它可以直接表示为
"\uD834\uDD1E"
。ECMA-404:JSON数据交换格式 我认为根本无需对此字符进行编码,因此它可以直接表示为
""
。但是,如果需要对其进行编码,则必须按照规范进行编码,例如"\uD834\uDD1E"
,而不能像合理的方式一样编码为"\u1d11e"
。这是为什么呢?
\u
转义格式仅限于4个十六进制数字,因此只能编码16位值。 0x1D11E不适合16位,因此需要使用代理对。这追溯到UCS-2时代,当时所有Unicode代码点都可以很好地适应16位。当Unicode超过16位时,发明了UTF-16以突破编码限制,但仍需要向后兼容现有的UCS-2数据和格式。 - Remy Lebeau"\u1d11e"
表示""
,那么使用\u1d11
代表ᴑ
来编码字符串"ᴑe"
就会变得困难。一个更好的问题是,为什么语言中还没有添加像 Python 和 C++ 中一样支持类似"\U0001d11e"
这样的序列的功能。 - 一二三\u{1d11e}
语法(类似于Perl)。 - nwellnhof