Unicode编码

Unicode编码

 

作者:林海枫

网址:http://blog.csdn.net/linyt/archive/2008/12/08/3477866.aspx

[]:文章版权为作者所有,欢迎转载,但请完整转载并注明作者和完整地址,请勿用于任何商业用途。

 

什么是Unicode(统一码)?

Unicode给每个字符提供了一个唯一的数字,
不论是什么平台,
不论是什么程序,

不论是什么语言。



本文的Unicode编码就是指Unicode为每个字符分配一个唯一数字这一规则,但并不涉及这任何字符对应数字是如何储存的,它将会在Unicode编码形式方面表述。


1. Unicode简介与历史

 

Unicode(统 一码 、万国码和单 一码 )是目前为止包含字符文字最多的一种编码方案或字符集,它几乎为全球每种语言文字分配了唯一的字符编码。它由Unicode协会http://www.unicode.org/组织进行开发,编码和实现。到目前为止,最新的Unicode标准版本为Unicode5.1, 20084月发布。Unicode的出现,使得一直已久的编码问题得以解决,不同语言文字都有唯一的编码,字符间不会造成混乱,以满足跨语言、跨平台进行文转换、处理要求。

Unicode项目始建于1988年,由几个软件公司协作开发而成的单一字符集编码标准(single character set encoding standard),支持全球所有的文字。于19911月,Unicode项目形成一个新的组织为Unicode协会(Consortium),负责Unicode的开发,编码和实现和标准和方案,同年8月发布Unicode标准1.0

无独有偶,一个名为ISO/IEC工作组于1984年成立,开始专注开发国际化字符集,支持全球所有语言的文字。该字符集命名为Universal Character Set(UCS), 1989年发布UCS标准草案。

这两个组织都致力于构造一种通用的编码方案和实现,但它们的字符集都不能兼容,这样两个标准使人们混乱。ISO/IECUnicode协会意识到这一点,1991开始合并这两个标准。合并过程出现一些需要协商的问题,首先是ISO/IEC标准处于草案阶段而Unicode1.0标准已经发布了;还有就是Unicode被设计为统一的16位编码方案,最多可包含 65536个字符,而ISO/IEC标准使用31位编码方案,可包含多达20亿个字符。

 

2. Unicode编码

 

计算机历史上最早的编码方案应该是ASCII码,它采用整数[0,127]对字符进行编码。每个ASCII字符数值不超过127,因此采用一个字节就可以储存字符。由此编码空间(codespace)为0127ASCII字符集中包含了英文字母、数字、符号和控制字符。

定义:

Codespace(编码空间):给字符集所有字符分配的整数集。

Codepoint(代码)codespace中的任一个数值都称为codepoint

 

由于ASCII码只能表示全球文字的极少一部分,因此Unicode为了能容纳全球所有语言的文字,必须有一个更大的codespace。在早期Unicode 标准未和ISO/ICE标准合并提时,Unicode使用16位(2字节)整数的codespace

Unicode编码字符集给每个字符分配了一个整数值,该整数值与Unicode字符集中的字符相对应,该整数有个特别称谓为Unicode scalar values(USVs);并且每个字符的USV和它对应的Codepoint是同一个数值,这里两个术语不进行区分,但后者最为常用。根据Unicode约定,Codepoint“U+”开始,紧接着它对应的十六进制数表示,若不足四位则以0补齐。如“U+ 0345” “U+ 10345” “U+ 20345” 等等。

在新的Unicode标准中,它的codespaceU+0000U+10FFFF,空间大小为17*64K。在与ISO/IEC标准的合并过程出现的问题, Unicode提出了平面(Plane)的概念。Unicode[U+0000, U+10FFFF]空间均等地划分成17块,每块称为一个平面,并以0作为开始编号进行命名。[U+0000, U+FFFF]所在的Plane称为Plane 0, [U+10000, U+1FFFF]所在的plane称为Plane 1, 依次类推。

早期的Unicode使用统一的16位编码,并且能够表示全球所有语言的文字,以及这些字符ISO/IEC字符集对应的字符进一致。早期16编码字符刚好在Plane 0里面,故UnicodePlane 0命名为Basic Multilingual Plane(BMP)。余下的Plane 1Plane 16称为Supplementary Planes。新标准Unicode的很大部分codepoint需要用超过2个节字(这里仅指表示,而非存诸codepoint或它对它的字符),但全球所有语言文字都位于BMP中,它可以满足我们多语言的处理,因此全球语言文字使用2个字节就可以表示了。

到目前为止,并不是每个Codepoint分配给字符的,因此Codespace存在很多真空”codepoint。具体如下:

1)每个Plane都有两个codepoint为非字符,它们是U+nFFFEU+nFFFF(这里n表示从010的十六进制数)。

2)从U+D800U+DFFFF2048codepoint为非字符。这些codepoint之所以不分配,是这些数值会由UTF-16 实现来使用,以免传输和储存过程出现冲突。

3)从标准TUS 3.1开始,Unicode保留32个字符U+FDD0..U+FDEF为非字符,便于程序用于特殊用途。

17plane中,一共包含1114112codepoint。除去66个(21732)为非字符, 2048个保留字符,Unicode space一共包含了1111988个可分配字符。

 

3. Unicode Planes结构与内容

 

Unicode字符集可以根据多种方式分类,但Unicode codespace逻辑上被划分成17Plane, 每个Plane包含65536(2^16)codepoint, 尽管如此,仍然只有少量的Plane被使用。当前Plane的划分和使用情况如下:

1Plane 0(U+0000-U+FFFF)

命名为基本多文平面(Basic Multilingual Plane, BMP)。从目前来说,Unicode分配的所有字符中,大部分字符都位于MBP。它包含了早期Unicode(合并前)所分配的字符和全球当前所有语言使用的书写文字。

2Plane 1(U+10000-U+1FFFF)

命名为辅助多文平面(Supplementary Multilingual Plane, SMP)

3Plane 2 (U+20000-U+2FFFF)

命名为表意文字补充平面(Supplementary Ideographic Plane, SIP)

4Planes 3 to 13(U+30000-U+DFFFF)

保留,未分配。

5Plane 14 UE0000UEFFFF

命名为特殊用途补充平面(Supplementray Special-purpose Plane, SSP)。

6 Plane 15 UF0000UFFFFF

命名为私有使用区(Private Use Area, PUA

7 Plane 16 U+100000-U10FFFF)

命名为私有使用区(Private User Area, PUA),保留。

 

3.1 基本多文平面(BMP

 

Unicode中第一个平面,通常称为基本多文平面(Basic Multilingual Plane, BMP), 它几乎包含了所有现代语言文字和大量特殊字符;此中很大部分分配给中文、日文和韩文文字(称为CJK)。在Unicode 5.1标准中,BMP所包含的字符如下:

 

·                       Basic Latin (0000– 007F )

·                       Latin-1 Supplement (0080–00FF)

·                       Latin Extended-A (0100– 017F )

·                       Latin Extended-B (0180– 024F )

·                       IPA Extensions (0250–02AF)

·                       Spacing Modifier Letters (02B0–02FF)

·                       Combining Diacritical Marks (0300– 036F )

·                       Greek and Coptic (0370–03FF)

·                       Cyrillic (0400–04FF)

·                       Cyrillic Supplement (0500– 052F )

·                       Armenian (0530– 058F )

·                       Hebrew (0590–05FF)

·                       Arabic (0600–06FF)

·                       Syriac (0700– 074F )

·                       Arabic Supplement (0750– 077F )

·                       Thaana (0780–07BF)

·                       N'Ko (Mandenkan) ( 07C 0–07FF)

·                       Indic scripts:

o                                    Devanagari (0900– 097F )

o                                    Bengali (0980–09FF)

o                                    Gurmukhi ( 0A 00– 0A 7F )

o                                    Gujarati ( 0A 80–0AFF)

o                                    Oriya (0B00–0B 7F )

o                                    Tamil (0B80–0BFF)

o                                    Telugu ( 0C 00– 0C 7F )

o                                    Kannada ( 0C 80–0CFF)

o                                    Malayalam (0D00–0D 7F )

o                                    Sinhala (0D80–0DFF)

·                       Thai (0E00–0E 7F )

·                       Lao (0E80–0EFF)

·                       Tibetan ( 0F 00–0FFF)

·                       Burmese ( Myanmar ) (1000– 109F )

·                       Georgian ( 10A 0–10FF)

·                       Hangul Jamo (1100–11FF)

·                       Ethiopic (1200– 137F )

·                       Ethiopic Supplement (1380– 139F )

·                       Cherokee ( 13A 0–13FF)

·                       Unified Canadian Aboriginal Syllabics (1400– 167F )

·                       Ogham (1680– 169F )

·                       Runic ( 16A 0–16FF)

·                       Philippine scripts:

o                                    Tagalog (1700– 171F )

o                                    Hanunóo (1720– 173F )

o                                    Buhid (1740– 175F )

o                                    Tagbanwa (1760– 177F )

·                       Khmer (1780–17FF)

·                       Mongolian (1800–18AF)

·                       Limbu (1900– 194F )

·                       Tai Le (1950– 197F )

·                       New Tai Lue (1980–19DF)

·                       Khmer Symbols (19E0–19FF)

·                       Buginese ( 1A 00– 1A 1F )

·                       Balinese (1B00–1B 7F )

·                       Lepcha (Rong) ( 1C 00– 1C 4F )

·                       Ol Chiki (Santali / Ol Cemet’) ( 1C 50– 1C 7F )

·                       Phonetic Extensions (1D00–1D 7F )

·                       Phonetic Extensions Supplement (1D80–1DBF)

·                       Combining Diacritical Marks Supplement (1DC0–1DFF)

·                       Latin Extended Additional (1E00–1EFF)

·                       Greek Extended ( 1F 00–1FFF)

·                       Symbols:

o                                    General Punctuation (2000– 206F )

o                                    Superscripts and Subscripts (2070– 209F )

o                                    Currency Symbols ( 20A 0–20CF)

o                                    Combining Diacritical Marks for Symbols (20D0–20FF)

o                                    Letterlike Symbols (2100– 214F )

o                                    Number Forms (2150– 218F )

o                                    Arrows (2190–21FF)

o                                    Mathematical Operators (2200–22FF)

o                                    Miscellaneous Technical (2300–23FF)

o                                    Control Pictures (2400– 243F )

o                                    Optical Character Recognition (2440– 245F )

o                                    Enclosed Alphanumerics (2460–24FF)

o                                    Box Drawing (2500– 257F )

o                                    Block Elements (2580– 259F )

o                                    Geometric Shapes ( 25A 0–25FF)

o                                    Miscellaneous Symbols (2600–26FF)

o                                    Dingbats (2700–27BF)

o                                    Miscellaneous Mathematical Symbols-A ( 27C 0–27EF)

o                                    Supplemental Arrows-A ( 27F 0–27FF)

o                                    Braille Patterns (2800–28FF)

o                                    Supplemental Arrows-B (2900– 297F )

o                                    Miscellaneous Mathematical Symbols-B (2980–29FF)

o                                    Supplemental Mathematical Operators ( 2A 00–2AFF)

o                                    Miscellaneous Symbols and Arrows (2B00–2BFF)

·                       Glagolitic ( 2C 00– 2C 5F )

·                       Latin Extended-C ( 2C 60– 2C 7F )

·                       Coptic ( 2C 80–2CFF)

·                       Georgian Supplement (2D00–2D 2F )

·                       Tifinagh (2D30–2D 7F )

·                       Ethiopic Extended (2D80–2DDF)

·                       Cyrillic Extended-A (2DE0–2DFF)

·                       Supplemental Punctuation (2E00–2E 7F )

·                       CJK Radicals Supplement (2E80–2EFF)

·                       Kangxi Radicals ( 2F 00–2FDF)

·                       Ideographic Description Characters (2FF0–2FFF)

·                       CJK Symbols and Punctuation (3000– 303F )

·                       Hiragana (3040– 309F )

·                       Katakana ( 30A 0–30FF)

·                       Bopomofo (3100– 312F )

·                       Hangul Compatibility Jamo (3130– 318F )

·                       Kanbun (3190– 319F )

·                       Bopomofo Extended ( 31A 0–31BF)

·                       CJK Strokes ( 31C 0–31EF)

·                       Katakana Phonetic Extensions ( 31F 0–31FF)

·                       Enclosed CJK Letters and Months (3200–32FF)

·                       CJK Compatibility (3300–33FF)

·                       CJK Unified Ideographs Extension A (3400–4DBF)

·                       Yijing Hexagram Symbols (4DC0–4DFF)

·                       CJK Unified Ideographs (4E00–9FFF)

·                       Yi Syllables (A000–A 48F )

·                       Yi Radicals (A490–A4CF)

·                       Vai (A500–A 63F )

·                       Cyrillic Extended-B (A640–A 69F )

·                       Modifier Tone Letters (A700–A 71F )

·                       Latin Extended-D (A720–A7FF)

·                       Syloti Nagri (A800–A 82F )

·                       Phags-pa (A840–A 87F )

·                       Saurashtra (A880–A8DF)

·                       Kayah Li (A900–A 92F )

·                       Rejang (A930–A 95F )

·                       Cham (AA00–AA 5F )

·                       Hangul Syllables (AC00–D7AF)

·                       High Surrogates (D800–DB 7F )

·                       High Private Use Surrogates (DB80–DBFF)

·                       Low Surrogates (DC00–DFFF)

·                       Private Use Area (E000–F8FF)

·                       CJK Compatibility Ideographs (F900–FAFF)

·                       Alphabetic Presentation Forms (FB00–FB 4F )

·                       Arabic Presentation Forms-A (FB50–FDFF)

·                       Variation Selectors (FE00–FE 0F )

·                       Vertical Forms (FE10–FE 1F )

·                       Combining Half Marks (FE20–FE 2F )

·                       CJK Compatibility Forms (FE30–FE 4F )

·                       Small Form Variants (FE50–FE 6F )

·                       Arabic Presentation Forms-B (FE70–FEFF)

·                       Halfwidth and Fullwidth Forms (FF00–FFEF)

·                       Specials (FFF0–FFFF)

 

3.2辅助多文平面(SMP

 

Unicode中的第一平面,称为Supplementary Multilingual Plane(SMP)。它用于分配历史文字(如Linear B),同时用于分配数学和音乐符号。在Unicode 5.1标准中,SMP包括下面的文字:

·                       Linear B Syllabary (10000– 1007F )

·                       Linear B Ideograms (10080–100FF)

·                       Aegean Numbers (10100– 1013F )

·                       Ancient Greek Numbers (10140– 1018F )

·                       Ancient Symbols (10190–101CF)

·                       Phaistos Disc (101D0–101FF)

·                       Lycian (10280– 1029F )

·                       Carian ( 102A 0–102DF)

·                       Old Italic (10300– 1032F )

·                       Gothic (10330– 1034F )

·                       Ugaritic (10380– 1039F )

·                       Old Persian ( 103A 0–103DF)

·                       Deseret (10400– 1044F )

·                       Shavian (10450– 1047F )

·                       Osmanya (10480–104AF)

·                       Cypriot Syllabary (10800– 1083F )

·                       Phoenician (10900– 1091F )

·                       Lydian (10920– 1093F )

·                       Kharoshthi ( 10A 00– 10A 5F )

·                       Cuneiform (Sumero-Akkadian) (12000–123FF)

·                       Cuneiform Numbers and Punctuation (12400– 1247F )

·                       Byzantine Musical Symbols (1D000–1D0FF)

·                       Musical Symbols (1D100–1D1FF)

·                       Ancient Greek Musical Notation (1D200–1D 24F )

·                       Tai Xuan Jing Symbols (1D300–1D 35F )

·                       Counting Rod Numerals (1D360–1D 37F )

·                       Mathematical Alphanumeric Symbols (1D400–1D7FF)

·                       Mahjong Tiles ( 1F 000– 1F 02F )

·                       Domino Tiles ( 1F 030– 1F 09F )

 

3.3表意文字补充平面(SIP

 

Unicode的第二平面,又称为表意文字补充平面(Supplementary Ideographic Plane, SIP)。它包含40000个统一汉字集(Unified Han Ideographs),为日常写作和通信中的生辟字。

CJK Unified Ideographs Extension B (20000– 2A 6DF)

CJK Compatibility Ideographs Supplement ( 2F 800–2FA 1F )

 

3.4保留平面

 

Unicode至今仍没有给Plane 3Plane 13(11个平面)分配字符,因此把它们称为保留平面(Unused Planes)。即使假设所有已知的书写系统文字都有待于Unicode进行编码,这些保留平面仍然不需要使用,可置身事外。然而,随着现代文明进程的发展,可能会发现更多、更新的语言文字。UCSUnicode需要一步步把这些新的文字加入到Unicode,到时这些保留平面会派上用场。其实Unicode已经有所行动了,把Plane 3试验性地命名为第三表意文字平面(Tertiary Ideographic Plane, TIP),计划分配给古汉字(Old Hanzi)和骨甲文(Oracle Bone)。

 

3.5 特殊用途补充平面(SSP

 

Plane 14(或十六进制E)命名为特殊用途补充平面(Supplementary Special-purpose Plane, SSP)。正如其名所述,SSP分配给特殊用途的字符。当前SSP包含两块大小分别是128240的非图形字符。第一块分配给语言标记符,便于在其它协议中标记该语言的内容,以防止把该语言当成协议的一部分而造成歧义(如XML中的xml::lang属性)。另一块用于字型变换选取器(glyph variation selectors),表示字符的字形。

 

3.6 私有使用平面(PUA

 

ISOUincode协会预留两个平面(Plane 1516)给第三方组织、团体、公司企业甚到个人使用。Unicode标准不使用这两个平,任何第三方组织可以给这两个平面分配字符并使用。但使用这些平面将丢失和其它软件或平台的互操作,互交换等特性,因此支持Unicode标准的软件或字体都不必支持第三方在这两平面分配的字符集。

 

4. Unicode 映射表

映射表,顾名思义就是codpoint到字符的关系,上面分别介绍了Unicode17个平面的用途,分配情况以及分配的字符。同时不同的平面有不情程度的真空codepoint,为了简明列出这些哪些codepoint没有分配,分配的codepoint对应什么字符,以及每个Plane中子区域的用途。下表可以简明说明这些情况。

 

BMP U0000 UFFFF)目前已全部分配,点下面的超链接可以查看各个子区域的字符集名称,以及它对应的字符。

0000—0FFF 8000—8FFF

1000—1FFF 9000—9FFF

2000—2FFF A000—AFFF

3000—3FFF B000—BFFF

4000—4FFF C000—CFFF

5000—5FFF D000—DFFF

6000—6FFF E000—EFFF

7000—7FFF F000—FFFF

 

SMPU10000 U1FFFF)目前只分配该平面的四分之一。

10000—10FFF

12000—12FFF

1D000—1DFFF

1F000—1FFFF

 

SIPU20000 U2FFFF)目前仍没有全部分配,只分配了四分之三。

20000—20FFF 28000—28FFF

21000—21FFF 29000—29FFF

22000—22FFF 2A000—2AFFF

23000—23FFF

24000—24FFF 2F000—2FFFF

25000—25FFF

26000—26FFF

27000—27FFF

 

SSPUE0000 – U+EFFFF),只分配了UE0000 UE0FFF 中的一部分。

E0000—E0FFF

 

5.  相关资料

Unicode Home Page http://www.unicode.org/

Unicode协议是Unicode标准的开发和维护组织,该网站上可以查阅最新的Unicode标准,codepoint的分配情况,以及最新的Unicode字符表(codepoint chart)。

Unicode Code Charts http://www.unicode.org/charts/

Unicode最新标准支持的字符分配表(目前为5.1)

Unicode Codepoint Chart http://inamidst.com/stuff/unidata/

一个非官方的Unicode字符表,以 Codepoint大小为顺序展开。

 

Wiki-en

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

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

 

A Unicode tutorial http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a

比较详细和简单的Unicode入门教程。

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值