为什么Unicode代码点显示为?U+
<codepoint>
例如,U+2202
表示字符∂。
为什么不U-
(破折号或连字符)或其他内容呢?
Answers:
字符“ U +”是MULTISET UNION“⊎” U + 228E字符(其中带有加号的U型联合符号)的ASCII化版本,旨在将Unicode象征为字符集的联合。请参阅Unicode邮件列表中的Kenneth Whistler的说明。
Unicode标准需要一些符号来谈论代码点和字符名称。它采用了“ U +”的约定,后接四个或更多的十六进制数字,至少可以追溯到1996年发布的Unicode标准2.0.0版(来源:Unicode Consortium网站上的归档PDF副本)。
“ U +”表示法很有用。它提供了一种将十六进制数字标记为Unicode代码点的方法,而不是八位字节或不受限制的16位数字或其他编码中的字符。它在运行文本时效果很好。“ U”表示“ Unicode”。
我从1990年代早期软件行业有关Unicode的讨论中得出的个人回忆是,在Unicode 1.0和Unicode 2.0时代,“ U +”后接四个十六进制数字的约定很常见。当时,Unicode被视为16位系统。随着Unicode 3.0的到来以及U + 010000及更高版本代码点处的字符编码,使用了“ U-”后跟六个十六进制数字的约定,特别是突出显示了数字中额外的两位数字。(或者相反,从“ U-”转换为“ U +”。)以我的经验,“ U +”约定现在比“ U-”约定更为普遍,很少有人使用“ U +”和“ U-”之间的差异以表示位数。
但是,我找不到从“ U +”到“ U-”的转换的文档。1990年代的归档邮件列表消息应该有证据,但是我不能方便地指出任何一个。的Unicode标准2.0声明,“Unicode字符码具有16个比特的均匀的宽度。” (第2-3页)。它规定了以下约定:“单个Unicode值表示为U + nnnn,其中nnnn是以十六进制表示的四位数”(第1-5页)。分配了代理值,但没有在U + FFFF上方定义任何字符代码,也没有提到UTF-16或UTF-32。它使用带有四个数字的“ U +”。Unicode标准3.0.0于2000年发布,定义了UTF-16(第46-47页),并讨论了U + 010000及更高版本的代码点。它在某些地方使用“ U +”,四位数字,在其他地方使用六位数字。我找到的最坚定的踪迹是在Unicode标准6.0.0版中,其中BNF语法符号表定义了符号U+HHHH
和U-HHHHHHHH
(第559页)。
“ U +”符号不是表示Unicode代码点或代码单位的唯一约定。例如,Python语言定义了以下字符串文字:
u'xyz'
表示Unicode字符串,Unicode字符序列'\uxxxx'
表示一个带有以四个十六进制数字表示的Unicode字符的字符串'\Uxxxxxxxx'
表示一个字符串,该字符串具有由八个十六进制数字表示的Unicode字符这取决于您正在谈论的Unicode标准版本。从维基百科:
标准的较旧版本使用类似的符号,但是规则略有不同。例如,Unicode 3.0使用“ U-”后跟八位数字,并允许仅将“ U +”仅使用四位数字来表示代码单位,而不是代码点。
仅显示该值为Unicode是一种惯例。十六进制值(0xB9
或B9h
)有点像'0x'或'h' 。为什么0xB9
而不是0hB9
(&hB9
或$B9
)?只是因为那是硬币翻转的方式:-)
x
(/ˈɛks/
)听起来更像是hex
超过h
(/eɪtʃ/
)一样。
&hB9
,Pascal使用$B9
,Intel语法汇编使用0B9h