为什么Unicode代码点显示为 U+
<codepoint>
?
例如,U+2202
表示字符∂。
为什么不U-
(短划线或连字符)或其他什么?
答案 0 :(得分:118)
字符“U +”是MULTISET UNION“⊎”U + 228E字符的ASCIIfied版本(U型联合符号,里面有加号),用于将Unicode表示为字符集的并集。请参阅Kenneth Whistler’s explanation in the Unicode mailing list。
答案 1 :(得分:12)
Unicode标准需要一些符号来讨论代码点和字符名称。它采用了“U +”的惯例,后面跟着四个或更多的十六进制数字,至少早于The Unicode Standard, version 2.0.0,发表于1996年(来源: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 Standard 2.0 声明,“Unicode字符代码具有16位的统一宽度。” (第2-3页)。它规定了“单个Unicode值表示为 U + nnnn ,其中 nnnn 是十六进制表示法的四位数”(第1-5页) 。分配了代理值,但在U + FFFF之上没有定义字符代码,也没有提到UTF-16或UTF-32。它使用四位数的“U +”。 2000年出版的The Unicode Standard 3.0.0定义了UTF-16(p.46-47)并讨论了U + 010000及以上的代码点。它在某些地方使用了四位数的“U +”,在其他地方使用了六位数。我找到的最完整的跟踪位于The Unicode Standard, version 6.0.0,其中BNF语法表示法表定义了符号U+HHHH
和U-HHHHHHHH
(第559页)。
“U +”表示法不是表示Unicode代码点或代码单元的唯一约定。例如,Python language defines the following string literals:
u'xyz'
表示Unicode字符串,Unicode字符序列'\uxxxx'
表示带有由四个十六进制数字表示的unicode字符的字符串'\Uxxxxxxxx'
表示带有由八位十六进制数字表示的unicode字符的字符串答案 2 :(得分:8)
这取决于您所谈论的Unicode标准的版本。来自Wikipedia:
使用的旧版本标准 类似的符号,但有点 不同的规则。例如,Unicode 3.0使用“U-”后跟8位数字,并允许使用“U +” 只有四位数 表示代码单元,而不是代码 点。
答案 3 :(得分:4)
这只是一个约定,表明该值是Unicode。对于十六进制值(0xB9
或B9h
),有点像'0x'或'h'。为什么0xB9
而非0hB9
(或&hB9
或$B9
)?只是因为这就是硬币翻转的方式: - )