通用字符名称不得指定短标识符小于00A0的字符,除了0024($)、0040(@)或0060(`),也不得指定范围在D800到DFFF之间的字符。
除了限制通用性之外,我想不出类似这样的限制有什么好处。大家知道背后的故事吗?
通用字符名称不得指定短标识符小于00A0的字符,除了0024($)、0040(@)或0060(`),也不得指定范围在D800到DFFF之间的字符。
除了限制通用性之外,我想不出类似这样的限制有什么好处。大家知道背后的故事吗?
D800
到 DFFF
区间内的码点不是有效的,它们是高代理项和低代理项,在UTF-16编码中只能成对出现来表示基本平面之外的码点。
另一个限制是为了避免通用字符名称与可以在C字符集中表示的字符冲突,以使不需要将通用字符名称解析为它们的Unicode等效项的编译器受益。所以编译器没有义务识别+写成\u002B
或知道a
和\u0061
表示相同的名称。($、@和`在C程序中不是注释和字符串以外的有效字符,因此lexer不需要特别处理它们。)
小于A0
的码点范围还包括控制字符和空白符。(在C中,\u00A0
不被认为是空格符。)