为什么'U +'用于指定Unicode代码点?

时间:2009-08-13 18:16:41

标签: unicode codepoint

为什么Unicode代码点显示为 U+ <codepoint>

例如,U+2202表示字符

为什么不U-(短划线或连字符)或其他什么?

4 个答案:

答案 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+HHHHU-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。对于十六进制值(0xB9B9h),有点像'0x'或'h'。为什么0xB9而非0hB9(或&hB9$B9)?只是因为这就是硬币翻转的方式: - )