为什么用'U +'来指定一个Unicode代码点?
为什么Unicode代码点显示为U+
<codepoint>
?
例如, U+2202
代表字符∂ 。
为什么不U-
(短划线或连字符)或其他什么?
字符“U +”是MULTISET UNION“⊎”U + 228E字符(U形联合符号,里面带有一个加号)的ASCII聚合版本,意思是把Unicode统一为字符集合。 请参阅Kenneth Whistler在Unicode邮件列表中的解释 。
Unicode标准需要一些符号来谈论代码点和字符名称。 它采用了“U +”的约定,后面至less有一个或更多的hex数字,至less可以追溯到1996年出版的Unicode标准 2.0.0版 (来源:Unicode Consortium网站上的归档PDF副本)。
“U +”符号是有用的。 它提供了一种将hex数字标记为Unicode代码点而不是八位字节或不受限制的16位数量或其他编码中的字符的方法。 它在运行文本中运行良好。 “U”表示“Unicode”。
从20世纪90年代早期软件业对Unicode的讨论中,我个人的回忆是,在Unicode 1.0和Unicode 2.0时代,“U +”后跟四个hex数字的惯例是常见的。 当时,Unicode被看作是一个16位系统。 随着Unicode 3.0的出现以及U + 010000及以上代码点的字符编码的出现,“U-”后面跟着六个hex数字的约定被用来特别用来突出显示数字中的两位数字。 (或者也许是相反的,从“U-”转换到“U +”)。根据我的经验,“U +”约定现在比“U-”约定更为普遍,很less有人使用“U +”和“U-”之间的差值来表示位数。
但是,我无法find从“U +”转换到“U-”的文档。 上世纪90年代存档的邮件列表消息应该有证据,但我不能方便地指向任何。 Unicode标准2.0声明:“Unicode字符代码具有16位的统一宽度”。 (第2-3页)。 它规定了“一个单独的Unicode值被表示为U + nnnn ,其中nnnn是以hex表示的四位数字”(第1-5页)。 代理值被分配,但在U + FFFF上面没有定义字符代码,并且没有提到UTF-16或UTF-32。 它使用了四位数的“U +”。 2000年出版的Unicode标准3.0.0定义了UTF-16(46-47页),并讨论了U + 010000及以上的代码点。 它在一些地方使用了四位数的“U +”,在其他地方使用了六位数字。 我发现的最简单的跟踪是在Unicode标准版本6.0.0中 ,其中BNF语法表示法的表定义符号U+HHHH
和U-HHHHHHHH
(第559页)。
“U +”符号不是表示Unicode代码点或代码单元的唯一约定。 例如, Python语言定义了以下string文字 :
-
u'xyz'
表示一个Unicodestring,一个Unicode字符序列 -
'\uxxxx'
表示一个带有由四个hex数字表示的unicode字符的string -
'\Uxxxxxxxx'
表示一个由8个hex数字表示的unicode字符的string
这取决于你所说的Unicode标准的版本。 维基百科 :
旧版本的标准使用了类似的符号,但规则略有不同。 例如,Unicode 3.0使用“U-”后跟八位数字,并且允许“U +”仅用于正好四位数字来表示代码单位,而不是代码点。
这只是一个表示值为Unicode的约定。 有点像'0x'或'h'hex值( 0xB9
或B9h
)。 为什么0xB9
而不是0hB9
(或&hB9
或$B9
)? 就因为这是如何翻转硬币:-)