Unicode基础知识

来源:互联网 发布:黄金时时彩软件 编辑:程序博客网 时间:2024/05/17 22:16
1. UCS简介

UCS,全称是Universal Character Set,是由Unicode Consortium和ISO联合制定的国际标准字符集。UCS囊括了所有常用的各种自然语言、数学、音乐和其它各种领域的符号。它的字符范围比传统的各国自行制定的字符集(主要覆盖本国使用的各种字符)范围更大,并且有能力在一个字符串中同时包括多种自然语言的字符而互不干扰(如一部分字符是英文,一部分法文,一部分中文,一部分日文,等等)。

2. 码点

UCS最多可以表示1,114,112个字符,编码范围从0到1,114,111。每个编码被称为码点(code point)。

在2012年9月发布的Unicode 6.2标准中,249,764 (22.4%)个码点已经被分配。其中包括:
-  110,182 (9.9%) 个码点已经分配给编码了的字符。其中109,976个是图形字符(有一部分不可见),206个是特殊用途的控制字符。
-  137,468 (12.3%) 个码点保留用于私有用途
-  2,048 个码点用于 surrogates。surrogates被设计用来扩充UTF-16能表达的字符范围。最初的UCS-2编码仅能表达BMP中的字符,扩充后可以表达17个平面的字符。
      在UTF-16编码中,surrogates必须成对出现。一个非surrogates码点(共2个字节)表示一个BMP字符,一对surrogates码点(共4个字节)表示一个BMP之外平面的字符。surrogates对的高位码点(high surrogates)范围是D800–DBFF,低位码点(low surrogates)范围是DC00–DFFF。两者组合可以表达0x400 x 0x400 = 0x100000个字符(即其它16个平面的字符)。一个surrogates对(H L)表达的非BMP字符的码点是:

      码点 = 0x10000 + (H - 0xD800) * 0x400 + (L - 0xDC00)

-  66 个码点用于非字符使用(各plane的U+FFFE..U+FFFF,以及BMP的U+FDD0..U+FDEF)。这些字符可以由各实现方案自由使用,但不应用于数据交换。
另有864,348 (77.6%)个码点尚未分配。

3. 平面

UCS的字符被划分为17个平面(plane),每个平面有2^16个字符。在每个平面内,用2个字节即可表示一个字符。
常用字符都集中在plane 0。其它平面中的字符都非常特殊或罕见。

在2013年发布的Unicode 6.3标准中,仅如下6个平面的部分码点已被分配。其它平面都处于未分配状态。

plane 0(Basic Multilingual Plane,BMP),对应的码点范围为00000-0FFFF。包括了各种常用语言和文字中的字符。这个平面中的码点已经几乎分配完毕,仅有数千空余。该平面包括了surrogates(D800-DFFF),另有一部分用于私有用途(E000-F8FF)- 共6400个。
plane 1(Supplementary Multilingual Plane,SMP),对应的码点范围为10000-1FFFF。
plane 2(Supplementary Ideographic Plane,SIP),对应的码点范围为20000-2FFFF。
...
plane 14(Supplementary Special-purpose Plane,SSP),对应的码点范围为E0000-EFFFF。
plane 15(Supplementary Private Use Area A,SPUA A),对应的码点范围为F0000-FFFFF。
plane 16(Supplementary Private Use Area B,SPUA B),对应的码点范围为100000-10FFFF。

每个平面可以进一步细分为块(block)。通常每个块中包括同一用途的类似字符。如:数学运算符,希伯来语。

BMP平面的最初128个码点分配给了ASCII字符,最初256个码点分配给了ISO 8859-1。

4. 类别

每个UCS字符都被分配了类别,有一个通用类别和一个字类别。
通用类别包括:letter, mark, number, punctuation, symbol, or control

5. 属性列表

每个字符的属性包括:
Name, Code Point, Representative Glyph, General Category, Combining Class, Bidirectional Category, Bidirectional Mirrored, Bidirectional Mirroring Glyph, Decimal Digit Value, Digit Value, Numeric Value, Ideographic, ...

6. 编码方式

常用的unicode编码方式有UTF-8和UTF-16。还有个很少使用的UTF-32,以及现在极少使用的UCS-2。

UTF-32

UTF-32是定长编码,使用4个字节。直接使用码点作为编码,可以表示所有UCS字符。

UTF-16

UTF-16是变长编码,可能是2个或4个字节。更早的UCS-2是一种定长的2个字节编码,直接使用码点作为编码,只能表示BMP平面内的字符。

High \ LowDC00DC01   …   DFFFD800010000010001…0103FFD801010400010401…0107FF  ?????DBFF10FC0010FC01…10FFFF
对码点范围:U+0000-U+D7FF 和 U+E000-U+FFFF,UTF-16直接使用码点作为字符编码。
对码点范围:U+D800-U+DFFF,UCS-2和UTF-16没有将它们分配给任何字符。
对码点范围:U+10000-U+10FFFF,UTF-16使用一对surrogates来表达每个字符。

    码点 = 0x10000 + (H - 0xD800) * 0x400 + (L - 0xDC00)



UTF-16的字节次序:

在生成字符串时,应用应该在起始位置放置一个16位的标记整数0xFEFF,后续字符按应用自己的字节序编码。
即,如果字符是采用big-endian,那么最前面应该是FE,FF两个字符;如果字符是采用little-endian,那么最前面应该是FF,FE两个字符。

在读取字符串时,应用读取最开始的16位整数。如果读出来是0xFEFF,就不需要翻转字节。如果读出来是0xFFFE,就需要翻转字节。

如果生成字符串时没有放置标记整数,UTF-16缺省使用big-endian字节序,即little-endian系统需要翻转字节。但实际中,windows应用很多使用little-endian作为缺省字节序。

也可以采用UTF-16BE或UTF-16LE这两种编码方式明确表明使用的字节序。但这两个编码方式使用还不够普遍。

UTF-8

UTF-8是目前最为推荐使用的unicode编码方式。它是变长编码,可能是1个、2个、3个或者4个字节。
相比UTF-16的好处有:一般所需编码字节数更少;与ASCII兼容;没有字节序问题。

Bits of
code pointFirst
code pointLast
code pointBytes in
sequenceByte 1Byte 2Byte 3Byte 4Byte 5Byte 6  7U+0000U+007F10xxxxxxx11U+0080U+07FF2110xxxxx10xxxxxx16U+0800U+FFFF31110xxxx10xxxxxx10xxxxxx21U+10000U+1FFFFF411110xxx10xxxxxx10xxxxxx10xxxxxxThe patterns below are not part of UTF-8, but were part of the first specification.26U+200000U+3FFFFFF5111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx31U+4000000U+7FFFFFFF61111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx

参考资料

http://en.wikipedia.org/wiki/Universal_Character_Set_characters
http://en.wikipedia.org/wiki/UTF-32
http://en.wikipedia.org/wiki/UTF-16
http://en.wikipedia.org/wiki/UTF-8

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 实体店分期买手机需要什么 手机分期付款条件 手机分期付款是什么意思 怎么分期购买手机 分期手机利息怎么算 在手机店分期买手机需要什么 实体店怎么分期买手机 手机分期需要什么手续 实体店手机分期条件 分期手机需要什么条件 手机店怎么分期买手机 信用卡分期付款买手机 网上怎么分期付款买手机 分期付款手机商城 苏宁分期付款买手机 怎样分期付款买手机 实体店手机分期付款流程 手机分期付款需要什么条件 手机分期付款怎么还款 怎么分期付款买手机 分期付款买手机流程 手机分期付款要什么条件 网上如何分期付款买手机 银行卡分期付款买手机 实体店分期付款买手机 分期买手机划算吗 手机分期怎么办理 分期买手机利息怎么算 零首付分期付款买手机 网上可以分期付款买手机吗 分期付款买手机需要什么条件 手机淘宝分期付款怎么弄 分期付款买手机划算吗 手机分期付款划算吗 淘宝分期付款买手机 手机分期付款利息多少 买手机怎样分期付款 手机分期付款首付多少 买手机分期付款需要什么条件 如何分期付款买手机 来分期商城东西是真的吗