为什么用“ U +”来指定Unicode代码点?


75

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

例如,U+2202表示字符

为什么不U-(破折号或连字符)或其他内容呢?

Answers:



15

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+HHHHU-HHHHHHHH(第559页)。

“ U +”符号不是表示Unicode代码点或代码单位的唯一约定。例如,Python语言定义了以下字符串文字

  • u'xyz' 表示Unicode字符串,Unicode字符序列
  • '\uxxxx' 表示一个带有以四个十六进制数字表示的Unicode字符的字符串
  • '\Uxxxxxxxx' 表示一个字符串,该字符串具有由八个十六进制数字表示的Unicode字符

感谢@Jim的解释。这真的很有帮助。我会看那些链接的文档。
Senthil Kumaran


8

这取决于您正在谈论的Unicode标准版本。从维基百科

标准的较旧版本使用类似的符号,但是规则略有不同。例如,Unicode 3.0使用“ U-”后跟八位数字,并允许仅将“ U +”仅使用四位数字来表示代码单位,而不是代码点。


那是有用的参考。但是没有提到这种变化的原因。这只是委员会的一个想法吗?
Senthil Kumaran

2
我在Unicode Consortium网站上存档的Unicode Standard 3.0.0Unicode Standard 2.0.0中都没有看到“ U-”约定。我认为Wikipedia在这里是错误的。
Jim DeLaHunt 2012年

1
它在前言(unicode.org/versions/Unicode3.0.0/Preface.pdf)中,但仅作简要介绍。
肖恩·布莱特

4

仅显示该值为Unicode是一种惯例。十六进制值(0xB9B9h)有点像'0x'或'h' 。为什么0xB9而不是0hB9&hB9$B9)?只是因为那是硬币翻转的方式:-)


1
他们甚至没有给抛硬币:x/ˈɛks/)听起来更像是hex超过h/eɪtʃ/)一样。
弗雷德里克·哈米迪

1
@FrédéricHamidi但VB使用&hB9,Pascal使用$B9,Intel语法汇编使用0B9h
phuclv

谢谢phuclv :-)是的,例子不是随机的:-)
Mihai Nita
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.