第1节 Unicode
Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。
Unicode伴随着通用字符集的标准而发展,同时也以书本的形式对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前
最新的版本为2014年6月16日公布的7.0.0,已收入超过十万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。
Unicode发展由非营利机构统一码联盟负责,该机构致力于让Unicode方案取代既有的字符编码方案。因为既有的方案往往空间非常有限,亦不适用于多语环境。
Unicode备受认可,并广泛地应用于电脑软件的国际化与本地化过程。有很多新科技,如可扩展置标语言、Java编程语言以及现代的操作系统,都采用Unicode编码。
起源与发展
Unicode是为了解决传统的字符编码方案的局限而产生的,例如ISO 8859-1所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。
Unicode编码包含了不同写法的字,如“ɑ/a”、“強/强”、“戶/户/戸”。然而在汉字方面引起了一字多形的认定争议(详见中日韩统一表意文字主题)。
在文字处理方面,统一码为每一个字符而非字形定义唯一的代码(即一个整数)。换句话说,统一码以一种抽象的方式(即数字)来处理字符,并将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。
目前,几乎所有电脑系统都支持基本拉丁字母,并各自支持不同的其他编码方式。Unicode为了和它们相互兼容,其首256字符保留给ISO 8859-1所定义的字符,使既有的西欧语系文字的转换不需特别考量;并且把大量相同的字符重复编到不同的字符码中去,使得旧有纷杂的编码方式得以和Unicode编码间互相直接转换,而不会丢失任何信息。举例来说,全角格式区段包含了主要的拉丁字母的全角格式,在中文、日文、以及韩文字形当中,这些字符以全角的方式来呈现,而不以常见的半角形式显示,这对竖排文字和等宽排列文字有重要作用。
在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面(英文:Basic Multilingual Plane,简写BMP。又称为“零号平面”、plane 0)里的所有字符,要用四位十六进制数(例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五位或六位十六进制数了。旧版的Unicode标准使用相近的标记方法,但却有些微小差异:在Unicode 3.0里使用“U-”然后紧接着八位数,而“U+”则必须随后紧接着四位数。
标准
位于美国加州的Unicode组织允许任何愿意支付会费的公司和个人加入,其成员包含了主要的电脑软硬件厂商,例如奥多比系统、苹果公司、惠普、IBM、微软、施乐等。
20世纪80年代末,组成Unicode组织的商业机构,和国际合作的国际标准化组织因为电脑普及和信息国际化的前提下,分别各自成立了Unicode组织和ISO-10646工作小组。他们不久便发现对方的存在,大家为着相同的目的而工作。1991年,Unicode Consortium与ISO/IEC JTC1/SC2同意保持Unicode码表与ISO 10646标准保持兼容并密切协调各自标准进一步的扩展。虽然实际上两者的字集编码相同,但实质上两者确实为两个不同的标准。Unicode 1.1对应于ISO 10646-1:1993,
Unicode 3.0对应于ISO 10646-1:2000,
Unicode 3.2对应于ISO 10646-2:2001,
Unicode 4.0对应于ISO 10646:2003,
Unicode 5.0对应于ISO 10646:2003及附录1–3。
Unicode自版本2.0开始保持了向后兼容,即新的版本仅仅增加字符,原有字符不会被删除或更名。
统一码联盟在1991年首次发布了The Unicode Standard。Unicode的开发结合了国际标准化组织所制定的ISO/IEC 10646,即通用字符集。Unicode与ISO/IEC 10646在编码的运作原理相同,但The Unicode Standard包含了更详尽的实现信息、涵盖了更细节的主题,诸如比特编码(bitwise encoding)、校对以及呈现等。The Unicode Standard也枚举了诸多的字符特性,包含了那些必须支持两种阅读方向的文字(由左至右或由右至左的文字阅读方向,例如阿拉伯文是由右至左)。Unicode与ISO/IEC 10646这两个标准在术语上的使用有些微的不同。
在2005年,Unicode的第十万个字符被引入成为标准之一,该字符被用于马拉雅拉姆语。
历史
Unicode截至目前为止历次的版次与发布时间如下:
Unicode 1.0:1991年10月
Unicode 1.0.1:1992年6月
Unicode 1.1:1993年6月
Unicode 2.0:1997年7月
Unicode 2.1:1998年5月
Unicode 2.1.2:1998年5月
Unicode 3.0:1999年9月;涵盖了来自ISO 10646-1的十六比特通用字符集(UCS)基本多文种平面(Basic Multilingual Plane)
Unicode 3.1:2001年3月;新增从ISO 10646-2定义的辅助平面(Supplementary Planes)
Unicode 3.2:2002年3月
Unicode 4.0:2003年4月
Unicode 4.0.1:2004年3月
Unicode 4.1:2005年3月
Unicode 5.0:2006年7月
Unicode 5.1:2008年4月
Unicode 5.2:2009年10月
Unicode 6.0:2010年10月
Unicode 6.1:2012年1月31日
Unicode 6.2:2012年9月
Unicode 6.3:2013年9月30日
Unicode 7.0:2014年6月15日
Unicode的编码和实现
大概来说,Unicode编码系统可分为编码方式和实现方式两个层次。
编码方式
统一码的编码方式与ISO 10646的通用字符集概念相对应。目前实际应用的统一码版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示2^16(即65536)个字符。基本满足各种语言的使用。实际上当前版本的统一码并未完全使用这16位编码,而是保留了大量空间以作为特殊使用或将来扩展。
上述16位统一码字符构成基本多文种平面。最新(但未实际广泛使用)的统一码版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与UCS-4保持一致。未来版本会扩充到ISO 10646-1实现级别3,即涵盖UCS-4的所有字符。UCS-4是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示231个字符,完全可以涵盖一切语言所用的符号。
基本多文种平面的字符的编码为U+hhhh,其中每个h代表一个十六进制数字,与UCS-2编码完全相同。而其对应的4字节UCS-4编码后两个字节一致,前两个字节则所有位均为0。
关于统一码和ISO 10646及UCS的详细关系,见通用字符集。
实现方式
Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)
例如,如果一个仅包含基本7位ASCII字符的Unicode文件,如果每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0。这就造成了比较大的浪费。对于这种情况,可以使用UTF-8编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度(具体方案参见UTF-8)。类似的,对未来会出现的需要4个字节的辅助平面字符和其他UCS-4扩充字符,2字节编码的UTF-16也需要通过一定的算法进行转换。
再如,如果直接使用与Unicode编码一致(仅限于BMP字符)的UTF-16编码,由于每个字符占用了两个字节,在麦金塔电脑(Mac)机和个人电脑上,对字节顺序的理解是不一致的。这时同一字节流可能会被解释为不同内容,如某字符为十六进制编码4E59,按两个字节拆分为4E和59,在Mac上读取时是从低字节开始,那么在Mac OS会认为此4E59编码为594E,找到的字符为“奎”,而在Windows上从高字节开始读取,则编码为U+4E59的字符为“乙”。就是说在Windows下以UTF-16编码保存一个字符“乙”,在Mac OS环境下打开会显示成“奎”。此类情况说明UTF-16的编码顺序若不加以人为定义就可能发生混淆,于是在UTF-16编码实现方式中使用了大端序(Big-Endian,简写为UTF-16 BE)、小端序(Little-Endian,简写为UTF-16 LE)的概念,以及可附加的字节顺序记号解决方案,目前在PC机上的Windows系统和Linux系统对于UTF-16编码默认使用UTF-16 LE。(具体方案参见UTF-16)
此外Unicode的实现方式还包括UTF-7、Punycode、CESU-8、SCSU、UTF-32、GB18030等,这些实现方式有些仅在一定的国家和地区使用,有些则属于未来的规划方式。目前通用的实现方式是UTF-16小端序(LE)、UTF-16大端序(BE)和UTF-8。
在微软公司Windows XP附带的记事本(Notepad)中,“另存为”对话框可以选择的四种编码方式除去非Unicode编码的ANSI(对于英文系统即ASCII编码,中文系统则为GB2312或Big5编码)外,其余三种为“Unicode”(对应UTF-16 LE)、“Unicode big endian”(对应UTF-16 BE)和“UTF-8”。
目前辅助平面的工作主要集中在第二和第三平面的中日韩统一表意文字中,因此包括GBK、GB18030、Big5等简体中文、繁体中文、日文、韩文以及越南喃字的各种编码与Unicode的协调性被重点关注。考虑到Unicode最终要涵盖所有的字符。从某种意义而言,这些编码方式也可视作Unicode的出现于其之前的既成事实的实现方式,如同ASCII及其扩展Latin-1一样,后两者的字符在16位Unicode编码空间中的编码第一字节各位全为0,第二字节编码与原编码完全一致。但上述东亚语言编码与Unicode编码的对应关系要复杂得多。
Unicode字符平面映射
目前的Unicode字符分为17组编排,每组称为平面(Plane),而每平面拥有65536(即216)个代码点。然而目前只用了少数平面。
平面 始末字符值 中文名称 英文名称
0号平面 U+0000 - U+FFFF 基本多文种平面 Basic Multilingual Plane,简称BMP
1号平面 U+10000 - U+1FFFF 多文种补充平面 Supplementary Multilingual Plane,简称SMP
2号平面 U+20000 - U+2FFFF 表意文字补充平面 Supplementary Ideographic Plane,简称SIP
3号平面 U+30000 - U+3FFFF 表意文字第三平面(未正式使用[1]) Tertiary Ideographic Plane,简称TIP
4号平面
至
13号平面 U+40000 - U+DFFFF (尚未使用)
14号平面 U+E0000 - U+EFFFF 特别用途补充平面 Supplementary Special-purpose Plane,简称SSP
15号平面 U+F0000 - U+FFFFF 保留作为私人使用区(A区)[2] Private Use Area-A,简称PUA-A
16号平面 U+100000 - U+10FFFF 保留作为私人使用区(B区)[2] Private Use Area-B,简称PUA-B
要有更详细的描述,请参阅:基本多文种平面与补充平面。
基本多文种平面
基本多文种平面(Basic Multilingual Plane, BMP),或称第0平面或0号平面(Plane 0),是Unicode中的一个编码区段。编码从U+0000至U+FFFF。
Unicode基本多文种平面的示意图。每个写着数字的格子代表256个码点。
状态
现版本为修订7.0.0版,2014年6月16日出版。已分配编码区段为:
编码范围 中文名称 英语名称
0000-001F C0控制符 C0 Controls
0020-007F 基本拉丁文 Basic Latin
0080-009F C1控制符 C1 Controls
00A0-00FF 拉丁文补充-1 Latin-1 Supplement
0100-017F 拉丁文扩展-A Latin Extended-A
0180-024F 拉丁文扩展-B Latin Extended-B
0250-02AF 国际音标扩展 IPA Extensions
02B0-02FF 占位修饰符号 Spacing Modifier Letters
0300-036F 结合附加符号 Combining Diacritics Marks
0370-03FF 希腊字母及科普特字母 Greek and Coptic
0400-04FF 西里尔字母 Cyrillic
0500-052F 西里尔字母补充 Cyrillic Supplement
0530-058F 亚美尼亚字母 Armenian
0590-05FF 希伯来文 Hebrew
0600-06FF 阿拉伯文 Arabic
0700-074F 叙利亚文 Syriac
0750-077F 阿拉伯文补充 Arabic Supplement
0780-07BF 它拿字母 Thaana
07C0-07FF 西非书面语言 N'Ko
0800-083F 撒玛利亚字母 Samaritan
0840-085F 曼达语 Mandaic
0860-08FF 阿拉伯文扩展-A Arabic Extended-A
0900-097F 天城文 Devanagari
0980-09FF 孟加拉文 Bengali
0A00-0A7F 果鲁穆奇字母 Gurmukhi
0A80-0AFF 古吉拉特文 Gujarati
0B00-0B7F 奥里亚文 Oriya
0B80-0BFF 泰米尔文 Tamil
0C00-0C7F 泰卢固文 Telugu
0C80-0CFF 卡纳达文 Kannada
0D00-0D7F 马拉雅拉姆文 Malayalam
0D80-0DFF 僧伽罗文 Sinhala
0E00-0E7F 泰文 Thai
0E80-0EFF 老挝文 Lao
0F00-0FFF 藏文 Tibetan
1000-109F 缅甸文 Myanmar
10A0-10FF 格鲁吉亚字母 Georgian
1100-11FF 谚文字母 Hangul Jamo
1200-137F 吉兹字母 Ethiopic
1380-139F 吉兹字母补充 Ethiopic Supplement
13A0-13FF 切罗基字母 Cherokee
1400-167F 统一加拿大原住民音节文字 Unified Canadian Aboriginal Syllabics
1680-169F 欧甘字母 Ogham
16A0-16FF 卢恩字母 Runic
1700-171F 他加禄字母 Tagalog
1720-173F 哈努诺文 Hanunóo
1740-175F 布什德文 Buhid
1760-177F 塔格巴努亚文 Tagbanwa
1780-17FF 高棉文 Khmer
1800-18AF 蒙古文 Mongolian
18B0-18FF 加拿大原住民音节文字扩展 Unified Canadian Aboriginal Syllabics Extended
1900-194F 林布文 Limbu
1950-197F 德宏傣文 Tai Le
1980-19DF 新傣仂文 New Tai Lue
19E0-19FF 高棉文符号 Khmer Symbols
1A00-1A1F 布吉文 Buginese
1A20-1AAF 老傣文 Tai Tham
1AB0-1AFF 组合变音标记扩展 Combining Diacritical Marks Extended
1B00-1B7F 巴厘字母 Balinese
1B80-1BBF 巽他字母 Sundanese
1BC0-1BFF 巴塔克文 Batak
1C00-1C4F 雷布查字母 Lepcha
1C50-1C7F 桑塔利文 Ol Chiki
1C80-1CBF 待定
1CC0-1CCF 巽他字母补充 Sudanese Supplement
1CD0-1CFF 梵文吠陀扩展 Vedic Extensions
1D00-1D7F 音标扩展 Phonetic Extensions
1D80-1DBF 音标扩展补充 Phonetic Extensions Supplement
1DC0-1DFF 结合附加符号补充 Combining Diacritics Marks Supplement
1E00-1EFF 拉丁文扩展附加 Latin Extended Additional
1F00-1FFF 希腊语扩展 Greek Extended
2000-206F 常用标点 General Punctuation
2070-209F 上标及下标 Superscripts and Subscripts
20A0-20CF 货币符号 Currency Symbols
20D0-20FF 组合用记号 Combining Diacritics Marks for Symbols
2100-214F 字母式符号 Letterlike Symbols
2150-218F 数字形式 Number Forms
2190-21FF 箭头 Arrows
2200-22FF 数学运算符 Mathematical Operators
2300-23FF 杂项工业符号 Miscellaneous Technical
2400-243F 控制图片 Control Pictures
2440-245F 光学识别符 Optical Character Recognition
2460-24FF 封闭式字母和数字 Enclosed Alphanumerics
2500-257F 制表符 Box Drawing
2580-259F 方块元素 Block Elements
25A0-25FF 几何图形 Geometric Shapes
2600-26FF 杂项符号 Miscellaneous Symbols
2700-27BF 标志装饰符号 Dingbats
27C0-27EF 杂项数学符号-A Miscellaneous Mathematical Symbols-A
27F0-27FF 追加箭头-A Supplemental Arrows-A
2800-28FF 盲文点字模型 Braille Patterns
2900-297F 追加箭头-B Supplemental Arrows-B
2980-29FF 杂项数学符号-B Miscellaneous Mathematical Symbols-B
2A00-2AFF 追加数学运算符 Supplemental Mathematical Operator
2B00-2BFF 杂项符号和箭头 Miscellaneous Symbols and Arrows
2C00-2C5F 格拉哥里字母 Glagolitic
2C60-2C7F 拉丁文扩展-C Latin Extended-C
2C80-2CFF 科普特字母 Coptic
2D00-2D2F 格鲁吉亚字母补充 Georgian Supplement
2D30-2D7F 提非纳文 Tifinagh
2D80-2DDF 吉兹字母扩展 Ethiopic Extended
2DE0-2DFF 西里尔字母扩展-A Cyrillic Extended-A
2E00-2E7F 追加标点 Supplemental Punctuation
2E80-2EFF 中日韩汉字部首补充 CJK Radicals Supplement
2F00-2FDF 康熙部首 Kangxi Radicals
2FF0-2FFF 表意符号说明 Ideographic Description Characters
3000-303F 中日韩符号和标点 CJK Symbols and Punctuation
3040-309F 日文平假名 Hiragana
30A0-30FF 日文片假名 Katakana
3100-312F 注音字母 Bopomofo
3130-318F 谚文兼容字母 Hangul Compatibility Jamo
3190-319F 汉文注释标志 Kanbun
31A0-31BF 注音字母扩展 Bopomofo Extended
31C0-31EF 中日韩笔画 CJK Strokes
31F0-31FF 日文片假名拼音扩展 Katakana Phonetic Extensions
3200-32FF 封闭式中日韩字母和月份 Enclosed CJK Letters and Months
3300-33FF 中日韩兼容字符 CJK Compatibility
3400-4DBF 中日韩统一表意文字扩展A CJK Unified Ideographs Extension A
4DC0-4DFF 易经六十四卦符号 Yijing Hexagrams Symbols
4E00-9FFF 中日韩统一表意文字 CJK Unified Ideographs
A000-A48F 彝文音节 Yi Syllables
A490-A4CF 彝文字根 Yi Radicals
A4D0-A4FF 老傈僳文 Lisu
A500-A63F 瓦伊语 Vai
A640-A69F 西里尔字母扩展-B Cyrillic Extended-B
A6A0-A6FF 巴姆穆语 Bamum
A700-A71F 修饰用声调符号 Modifier Tone Letters
A720-A7FF 拉丁文扩展-D Latin Extended-D
A800-A82F 锡尔赫特文 Syloti Nagri
A830-A83F 通用印度数字格式 Common Indic Number Forms
A840-A87F 八思巴文字 Phags-pa
A880-A8DF 索拉什特拉文 Saurashtra
A8E0-A8FF 天城文扩展 Devanagari Extended
A900-A92F 克耶里字母 Kayah Li
A930-A95F 勒姜字母 Rejang
A960-A97F 谚文扩展-A Hangul Jamo Extended-A
A980-A9DF 爪哇字母 Javanese
A9E0-A9FF 缅甸文扩展-B Myanmar Extended-B
AA00-AA5F 占语字母 Cham
AA60-AA7F 缅甸文扩展-A Myanmar Extended-A
AA80-AADF 越南傣文 Tai Viet
AAE0-AAFF 曼尼普尔文扩展 Meetei Mayek Extensions
AB00-AB2F 吉兹字母扩展-A Ethiopic Extended-A
AB30-AB6F 拉丁文扩展-E Latin Extended-E
ABC0-ABFF 曼尼普尔文 Meetei Mayek
AC00-D7AF 谚文音节 Hangul Syllables
D7B0-D7FF 谚文字母扩展-B Hangul Jamo Extended-B
D800-DBFF UTF-16的高半区 High-half zone of UTF-16
DC00-DFFF UTF-16的低半区 Low-half zone of UTF-16
E000-F8FF 专用区 Private Use Area
F900-FAFF 中日韩兼容表意文字 CJK Compatibility Ideographs
FB00-FB4F 字母表达形式(拉丁字母连字、亚美尼亚字母连字、希伯来文表现形式) Alphabetic Presentation Forms
FB50-FDFF 阿拉伯字母表达形式-A Arabic Presentation Forms A
FE00-FE0F 异体字选择符 Variation Selector
FE10-FE1F 竖排形式 Vertical Forms
FE20-FE2F 组合用半符号 Combining Half Marks
FE30-FE4F 中日韩兼容形式 CJK Compatibility Forms
FE50-FE6F 小写变体形式 Small Form Variants
FE70-FEFF 阿拉伯文表达形式-B Arabic Presentation Forms B
FF00-FFEF 半角及全角字符 Halfwidth and Fullwidth Forms
FFF0-FFFF 特殊 Specials
第一辅助平面
第一辅助平面又称多文种补充平面(Supplementary Multilingual Plane,缩写SMP,或简称Plane 1),摆放拼音文字(主要为现时已不再使用的古老文字)、手写文字和音符等符号。用于学者的专业论文中使用这些古老或过时的语言书写符号。范围在U+10000~U+1FFFD。计划分配如下。
编码范围 中文名称 英语名称
10000-1007F 线形文字B音节文字 Linear B Syllabary
10080-100FF 线形文字B表意文字 Linear B Ideograms
10100-1013F 爱琴海数字 Aegean Numbers
10140-1018F 古希腊数字 Ancient Greek Numbers
10190-101CF 古代记数系统 Ancient Symbols
101D0-101FF 费斯托斯圆盘 Phaistos Disc
10280-1029F 吕基亚字母 Lycian
102A0-102DF 卡利亚字母 Carian
102E0-102FF 科普特闰余数字 Coptic Epact Numbers
10300-1032F 古意大利字母 Old Italic
10330-1034F 哥特字母 Gothic
10350-1037F 古彼尔姆字母 Old Permic
10380-1039F 乌加里特字母 Ugaritic
103A0-103DF 古波斯文 Old Persian
10400-1044F 德赛莱特字母 Deseret
10450-1047F 萧伯纳字母 Shavian
10480-104AF 奥斯曼亚字母 Osmanya
10500-1052F 艾尔巴桑字母 Elbasan
10530-1056F 高加索阿尔巴尼亚文 Caucasian Albanian
10600-1077F 线形文字A Linear A
10800-1083F 塞浦路斯音节文字 Cypriot Syllabary
10840-1085F 帝国亚兰文字 Imperial Aramaic
10860-1087F 帕尔迈拉字母 Palmyrene
10880-108AF 纳巴泰文 Nabataean
10900-1091F 腓尼基字母 Phoenician
10920-1093F 吕底亚字母 Lydian
10980-1099F 麦罗埃文 Meroitic Hieroglyphs
109A0-109FF 麦罗埃文草书 Meroitic Cursive
10A00-10A5F 佉卢文 Kharoshthi
10A60-10A7F 古南阿拉伯字母 Old South Arabian
10A80-10A9F 古北阿拉伯字母 Old North Arabian
10AC0-10AFF 摩尼教文 Manichaean
10B00-10B3F 阿维斯陀文字 Avestan
10B40-10B5F 碑刻帕提亚文 Inscriptional Parthian
10B60-10B7F 碑刻巴列维文 Inscriptional Pahlavi
10B80-10BAF 诗篇巴列维文 Psalter Pahlavi
10C00-10C4F 古突厥文 Old Turkic
10E60-10E7F 卢米文数字 Rumi Numeral Symbols
11000-1107F 婆罗米文字 Brahmi
11080-110CF 凯提文 Kaithi
110D0-110FF 索拉桑朋文 Sora Sompeng
11100-1114F 查克马文 Chakma
11150-1117F 马哈佳尼文 Mahajani
11180-111DF 夏拉达文 Sharada
111E0-111FF 古僧伽罗文数字 Sinhala Archaic Numbers
11200-1124F 可吉文 Khojki
112B0-112FF 库达瓦迪文 Khudawadi
11300-1137F 帕拉瓦文 Grantha
11480-114DF Tirhuta
11580-115FF 悉昙文字 Siddham
11600-1165F 莫迪文 Modi
11680-116CF 塔克里字母 Takri
118A0-118FF 瓦兰齐地文 Warang Citi
11AC0-11AFF Pau Cin Hau
12000-123FF 楔形文字 Cuneiform
12400-1247F 楔形文字数字和标点符号 Cuneiform Numbers and Punctuation
13000-1342F 埃及圣书体 Egyptian Hieroglyphs
16800-16A3F 巴姆穆文字补充 Bamum Supplement
16A40-16A6F Mro
16AD0-16AFF 巴萨哇文字 Bassa Vah
16B00-16B8F Pahawh苗文 Pahawh Hmong
16F00-16F9F 柏格理苗文 Miao
1B000-1B0FF 日文假名补充 Kana Supplement
1BC00-1BC9F 杜普雷速记 Duployan
1BCA0-1BCAF 速记格式控制符 Shorthand Format Controls
1D000-1D0FF 拜占庭音乐符号 Byzantine Musical Symbols
1D100-1D1FF 音乐符号 Musical Symbols
1D200-1D24F 古希腊音乐记号 Ancient Greek Musical Notation
1D300-1D35F 太玄经符号 Tai Xuan Jing Symbols
1D360-1D37F 算筹 Counting Rod Numerals
1D400-1D7FF 字母和数字符号 Mathematical Alphanumeric Symbols
1E800-1E8DF Mende Kikakui
1EE00-1EEFF 阿拉伯字母数字符号 Arabic Mathematical Alphanumeric Symbols
1F000-1F02F 麻将牌 Mahjong Tiles
1F030-1F09F 多米诺骨牌 Domino Tiles
1F0A0-1F0FF 扑克牌 Playing Cards
1F100-1F1FF 封闭式字母数字补充 Enclosed Alphanumeric Supplement
1F200-1F2FF 封闭式表意文字补充 Enclosed Ideographic Supplement
1F300-1F5FF 杂项符号和象形文字 Miscellaneous Symbols And Pictographs
1F600-1F64F 表情符号 Emotions
1F650-1F67F 装饰符号 Ornamental Dingbats
1F680-1F6FF 交通和地图符号 Transport And Map Symbols
1F700-1F77F 炼金术符号 Alchemical Symbols
1F780-1F7FF 几何图形扩展 Geometric Shapes Extended
1F800-1F8FF 追加箭头-C Supplemental Arrows-C
以下是它们的编码表。
10000-10FFF - 12000-12FFF - 1D000-1DFFF - 1F000-1FFFF
第二辅助平面
第二辅助平面又称为表意文字补充平面(Supplementary Ideographic Plane,缩写SIP,或简称Plane 2),整个范围在U+20000~U+2FFFD。整个平面配置的都是一些罕用的汉字或地区的方言用字,如粤语用字及越南语的字喃。现时摆放了“中日韩统一表意文字扩展B区”(4万3253个汉字)、“中日韩统一表意文字扩展C区”(4149个汉字)、“中日韩统一表意文字扩展D区”(222个汉字)以及中日韩兼容表意文字增补(CJK Compatibility Ideographs Supplement)。预计“中日韩统一表意文字扩展E区”也会使用此平面。
已分配和计划分配的编码区段为:
U+20000-U+2A6DF:中日韩统一表意文字扩展B区
U+2A700-U+2B73F:中日韩统一表意文字扩展C区
U+2B740-U+2B81F:中日韩统一表意文字扩展D区
U+2B820-U+2F7FF:中日韩统一表意文字扩展E区(还在草拟阶段)
U+2F800-U+2FA1F:中日韩兼容表意文字增补
以下是其编码表。
20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF - 26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF
第三至十三辅助平面
第三辅助平面尚未使用,但打算用来摆放甲骨文、金文、小篆、中国战国时期文字等。 计划分配的编码区段为:
U+30000-U+317FF:甲骨文
U+32000-U+32FFF:金文
U+34000-U+368FF:小篆
第四至第十三辅助平面并未计划使用。
第十四辅助平面
第十四辅助平面又称特别用途补充平面(Supplementary Special-purpose Plane,简称SSP),摆放“语言编码标签”和“字形变换选取器”,它们都是控制字符。范围在U+E0000~U+E01FF。
编码范围 中文名称 英语名称
E0000-E007F 标签 Tags
E0100-E01EF 选择器变化补充 Variation Selectors Supplement
编码表详见E0000-E0FFF。
第十五至十六辅助平面
第十五至十六辅助平面都是私人使用区。它们的范围是U+F0000~U+FFFFD及U+100000~U+10FFFD.
非Unicode环境
在非Unicode环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非Unicode的字符编码转换为同一字符对应的系统内部使用的Unicode编码。可以在“语言与区域设置”中选择一个代码页作为非Unicode编码所采用的默认编码方式,如936为简体中文GB码,950为繁体中文Big5(皆指PC上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。只有完全采用统一编码才能彻底解决这些问题,但目前尚无法做到这一点。
代码页技术现在广泛为各种平台所采用。UTF-7的代码页是65000,UTF-8的代码页是65001。
XML和Unicode
XML及其子集XHTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进制Unicode代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。
过去电脑编码的8位标准,使每个国家都只按国家使用的字符而编定各自的编码系统;而对于部份字符系统比较复杂的语言,如越南语,又或者东亚国家的大型字符集,都不能在8位的环境下正常显示。
只是最近才有在文本中对十六进制的支持,那么旧版本的浏览器显示那些字符或许可能有问题-大概首先会遇到的一个问题只是在对于大于8位Unicode字符的显示。解决这个问题的普遍做法仍然是将其中的十六进制码转换成一个十进制码(例如:♠用♠代替♠)。
也有一些字符集标准将一些常用的标志存放在字符内码外面,那么你可能使用象—这样的文本标志来表示一个长划(—)的情况,即使它的字符内码已经被使用,这些标准也不包含那个字符。
然而部分由于Unicode版本发展原因,很多浏览器只能显示UCS-2完整字符集,也即现在使用的Unicode版本中的一个小子集。下表可以检验您的浏览器如何显示各种Unicode代码:
代码 字符标准名称(英语) 在浏览器上的显示
A 大写拉丁字母“A” A
ß 小写拉丁字母“Sharp S” ß
þ 小写拉丁字母“Thorn” þ
Δ 大写希腊字母“Delta” Δ
Й 大写斯拉夫字母“Short I” Й
ק 希伯来字母“Qof” ק
م 阿拉伯字母“Meem” م
๗ 泰文数字7 ๗
ቐ 埃塞俄比亚音节文字“Qha” ቐ
あ 日语平假名“A” あ
ア 日语片假名“A” ア
叶 简体汉字“叶” 叶
葉 繁体汉字“葉” 葉
엽 韩国音节文字“Yeop” 엽
一些多语言支持的网页浏览器,比如微软Windows系统的Internet Explorer 5.5及以上版本,以及跨平台的浏览器Mozilla/Netscape 6,可以在安装时根据需要动态地使用相应的字符集,预先安装了合适的语言包,就可以同时显示页面上的各种Unicode字符。Internet Explorer 5.5还提出用户可以在需要新字体时,即装即用。另外的浏览器如Netscape Navigator 4.77,则只能显示跟页面编码相应字符集中的文字。当你使用后一种浏览器时,你不大可能预先安装所有的字体,即使有了字体,浏览器也不一定能将这些字体完全应用起来。可能遇到的情况是,这种浏览器只能够显示部分文字,因为它们是按照标准进行编码,尽管理论上在兼容的系统中,只要有了相应的Code2000字体,就可以正确显示。一种变通的办法,是将某些少见的字符,通过“名称实体引用”的方式来使用。
输入方法
不同的操作系统,各有直接输入Unicode字符的方法:
基于X Window System的Linux系统, 如Ubuntu的Gnome Terminal, 首先按下Ctrl+Shift+U,然后输入10进制Unicode数,如interpunct间隔符输入00b7 ,最后按空格键;
Microsoft Windows系统, 按下Alt+0183表示interpunct间隔符。
在SGML、HTML、XML的文本中,使用字符值引用或字符实体引用表示一个Unicode字符。
中文输入法
截至2011年10月,可以使用微软拼音2003或2007版本,仓颉输入法第三代第五代第六代版本,郑码Unicode版本,海峰五笔9.3版本,新注音输入法和VimIM进行输入。
微软拼音在输入法启动状态下,单击语言栏上的“功能菜单”按钮,指向“辅助输入法”即可发现“Unicode码输入方式”,利用它可以直接输入Unicode相应十六进制值的方式输入相应文字。例如中文“胥”输入“5066”,朝鲜文字“셅”输入“c145”(不需要在前面加0x或x)。
仓颉输入法已为Unicode汉字、类汉字编码,可以在仓颉输入法方式下通过仓颉码输入方式输入Unicode内的中日韩汉字及韩文。以仓颉输入法第五代为例,例如汉字“㗎”输入“口大口木”,汉字“胥”输入“弓人月”,汉字“㿱”输入“手中木竹水”,朝鲜文字“닮”输入“尸卜尸女口”。
郑码已为Unicode汉字、类汉字编码,可以在郑码输入法方式下通过郑码字码输入方式输入Unicode内的中日韩汉字及韩文。例如汉字“㗎”输入“JYJF”,汉字“胥”输入“XIQ”,汉字“㿱”输入“DPXI”,朝鲜文字“길”输入“XIYY”。
海峰五笔此输入法已经直接支持通过五笔码输入方式输入Unicode内的任意中日韩汉字,但无法使用键入Unicode码的方式输入。例如汉字(Unicode部分)“㗎”为“keks”,CJK扩展B区的“?”为“iyho”和CJK扩展C区的“?”为“muih”。
新注音输入法在输入法启动状态时,打入键盘上的“多功能前导字符键”(及通用键盘上之“`”),第一次使用会弹出说明。输入Unicode字符“胥”则是在键盘上键入“`U5066”。而韩语中的“셅”,则输入“`UC145”。而要输入日语自制汉字“峠”,则是“`U5CE0”。
VimIM在Vim环境中,可以直接键入十进制或十六进制Unicode码。既不需要启动输入法,也不需要码表。
呒虾米输入法,支持Unicode,以26个英文字母为组字按键,支持基本繁体中文、简体中文外,还可直接输入符号、日文汉字及平假名、片假名。
日文输入法
使用Microsoft IME 2007,可以在IME PAD里找到Unicode的点击表。点击字符即可输入。选择字体可以预览字符效果。
其他
除了输入法外,操作系统也会提供另外几种方法输入Unicode。像是Windows 2000之后的Windows系统就提供一个可点击的字符映射表。又或者在Microsoft Word下,按下Alt键不放,输入0和某个字符的Unicode编码(十进制),再松开Alt键即可得到该字符,如Alt + 033865会得到Unicode字符叶。另外按Alt + X组合键,MS Word也会将光标前面的字符同其十六进制的四位Unicode编码进行互相转换。
汉字问题
统一码这种为数万汉字逐一编码的方式很浪费资源,且要把汉字增加到标准中也并不容易,因此去研究以汉字部件产生汉字的方法(如动态组字),期望取代为汉字逐一编码的方法。Unicode委员会在关于中文和日语的常用问题列表里回答了此问题。主要问题是汉字中各个组件的相对大小不是固定的。比如“员”字,由“口”和“贝”组成,而“呗”也是由“口”和“贝”组成,但其相对位置和大小并不一致。还有一些其他原因,比如字符比较和排序时需要先对编码流进行分析后才能得到各个字符,增加处理程序复杂性等。
另一个问题是:由于中国历代字书有收录讹字(即错别字)的习惯,因此Unicode编码中收入大量讹字,占据大量空间,引发批评。电脑文件中若使用错讹字,在用正确字做检索时,用错讹字写出的同一个词语无法检出。
通用字符集
通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。
通用字符集又称Universal Multiple-Octet Coded Character Set,中国大陆译为通用多八位编码字符集,台湾译为广用多八比特编码字元集。
概要
通用字符集包括了其他所有字符集。它保证了与其他字符集的双向兼容,即,如果你将任何文本字符串翻译到UCS格式,然后再翻译回原编码,你不会丢失任何信息。
UCS包含了已知语言的所有字符。除了拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的方块文字,UCS还包括大量的图形、印刷、数学、科学符号。
ISO/IEC 10646定义了一个31位的字符集。
ISO/IEC 10646-1标准第一次发表于1993年,现在的公开版本是ISO/IEC 10646-1:2000。ISO/IEC 10646-2在2001年发表。
UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。
实现级别
并不是所有的系统都需要支持像组合字符这样的的先进机制。因此ISO 10646指定了如下三种实现级别:
级别1:不支持组合字符和谚文字母字符。
级别2:类似于级别1,但在某些文字中,允许一列固定的组合字符,因为如果没有最起码的几个组合字符,UCS就不能完整地表达这些语言。
级别3:支持所有的通用字符集字符,如,可以在任意一个字符上加上一个箭头或一个鼻音化符号.
Unicode和ISO 10646的关系
历史上存在两个独立的尝试创立单一字符集的组织,即
国际标准化组织(ISO)于1984年创建的ISO/IEC
JTC1/SC2/WG2,其含义是International Organization for Standardization / International Electrotechnical Commission, Joint Technical Committee #1 [Information Technology], Subcommittee #2 [Coded Character Sets], Working Group #2 [Multi-octet codes]). ISO 10646表示这是ISO 646的扩展。
由Xerox、Apple等软件制造商于1988年组成的统一码联盟。前者开发的ISO/IEC 10646项目,后者开发的统一码项目。因此最初制定了不同的标准。
1991年前后,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。1991年,不包含CJK统一汉字集的Unicode 1.0发布。随后,CJK统一汉字集的制定于1993年完成,发布了ISO 10646-1:1993,即Unicode 1.1。
从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码;ISO也承诺,ISO 10646将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致。两个项目仍都独立存在,并独立地公布各自的标准。但统一码联盟和ISO/IEC JTC1/SC2都同意保持两者标准的码表兼容,并紧密地共同调整任何未来的扩展。在发布的时候,Unicode一般都会采用有关字码最常见的字体,但ISO 10646一般都尽可能采用Century字体。
Unicode和ISO 10646的异同
统一码联盟公布的Unicode标准包含了ISO/IEC 10646-1实现级别3的基本多文种平面。在两个标准里,所有的字符都在相同的位置并且有相同的名字。
ISO/IEC 10646标准,就像ISO/IEC 8859标准一样,只不过是一个简单的字符集表。它定义了一些编码的别名,指定了一些与标准有关的术语,并包括了规范说明,指定了怎样使用UCS连接其他ISO标准的实现,比如ISO/IEC 6429和ISO/IEC 2022。还有一些与ISO紧密相关的,比如ISO/IEC 14651是关于UCS字符串排序的。
Unicode标准,额外定义了许多与字符有关的语义符号学。Unicode详细说明了绘制某些语言(如阿拉伯语)表达形式的算法,处理双向文字(比如拉丁文和希伯来文的混合文字)的算法,排序与字符串比较所需的算法,等等。
由于Unicode这一名字比较好记,因而它使用更为广泛。不过一般认为,用于打印ISO/IEC 10646-1标准的字体在某些方面的质量,要高于Unicode 2.0。
两者部分样例字形有显著的区别。ISO/IEC 10646-1标准同样使用四种不同的风格变体来显示表意文字如中文、日文、韩文(即CJK),但Unicode 2.0的表里只有中文的变体。甚至存在“Unicode对日本用户来说不可接受”的不实传说。
常见误解
ISO 10646是字形标准
实际上,ISO/IEC 10646处理的是编码标准,但因为一些数据的混乱,而使人产生误会。比如一个常见的例子是:香港有研究人员以“ISO10646HK.NET”为网址,公布一些字形制作和拼音厘定的文件。有些人便因此误以为ISO/IEC 10646是字形标准。
其实,在汉字文化圈中,各地都有其字形标准,例如香港的标准是《常用字字形表》。而ISO/IEC 10646则是作为一套编码标准,而不是去处理各地标准的细微差异或厘定标准字形。
ISO 10646比Unicode更支持某地编码
在Unicode和ISO/IEC 10646两个标准中,虽然两者部分样例字形有显著的区别,所有的字符都在相同的位置并且有相同的名字。ISO/IEC 10646-1标准使用四种不同的风格来显示中(繁、简)、日、韩文字,但Unicode的表中,只用简体中文风格来显示,像“Unicode对日本用户来说不可接受”的误解,便由此产生。
其实,上文已说明,ISO/IEC 10646或Unicode都只是编码标准,并不处理字形风格标准之问题。字形的风格可以通过改变显示字体来解决。