对Unicode和表示字符所需的位数的混淆

  • 本文关键字:Unicode 表示 字符 unicode
  • 更新时间 :
  • 英文 :


我很困惑Unicode中有1114112个字符,但同时我们可以使用UTF-16(使用16位)来访问所有字符。我的意思是,难道他们不需要存储32位吗?

我听说这与代孕对有关,但我不知道它们到底是什么。

Unicode在历史上是一个16位代码和字符集(在最初的版本中)。这也是UCS-2作为编码创建的时候,通用字符集中的每个字符都是一个2字节的单元。

很快就清楚了(也是由于该项目的一些范围变化),16位和65536个字符太少,无法使用,Unicode扩展到21位,组织在17个平面中,其中第一个65536字符形成了第0个,即基本多语言平面(BMP)。

同时,BMP中的2048个代码点被留出作为所谓的高和低替代物。其中两个将表示另一个平面中的一个角色。这启用了UTF-16,其中每个代码单元仍然有两个字节长,一个或两个代码单元(在后一种情况下,通过组合高和低代理)将表示单个代码。同样,有人宣布,这些代孕者不得单独出现或出现错误的顺序。代理字符主要是一个奇怪的现象(它们形成了Unicode中最大的非字符块),但从技术上讲,它是实现从16位到21位Unicode路径的最干净的方式。

无论你听到或想到什么,Unicode在其历史上最长的一段时间里都不是16位代码,目前没有任何东西需要16位。但是:

  1. Unicode早期采用者的系统和环境最初使用UCS-2,只是因为这是一种支持新字符集中所有字符的简单方法。那些过渡到UTF-16。Windows、Java和.NET(由于其Windows传统)就是这样的例子
  2. 如今,大多数其他地方都使用UTF-8,这也是网络上占主导地位的编码方式(据谷歌称)。UTF-8不需要代写对,而是采用不同的方案,其中代码点由一个(ASCII)、两个、三个或四个代码单元表示(取决于代码点)
  3. 还有UTF-32,与UCS-4相同,每个字符使用四个字节。这主要用于软件的一些内部过程,其中每个代码点需要具有相同的长度。它很少用于存储或交换

unicode有不同的编码。UTF-8和UTF-16都使用一个或多个8或16位Blob来表示单个字符,具体取决于任何unicode代码点。

wchar_t或16位整数只能表示一些unicode代码点。

http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings

关于代理项对:

http://msdn.microsoft.com/en-us/library/8k5611at.aspxhttp://www.unicode.org/faq/utf_bom.html#utf16-4

最新更新