Unicode
Unicode,全称为Unicode标准(The Unicode Standard),其官方机构Unicode联盟所用的中文名称为统一码[1],又译作万国码、统一字符码、统一字符编码[2],是信息技术领域的业界标准,其整理、编码了世界上大部分的文字系统,使得电脑能以通用划一的字符集来处理和显示文字,不但减轻在不同编码系统间切换和转换的困扰,更提供了一种跨平台的乱码问题解决方案。Unicode由非营利机构Unicode联盟(Unicode Consortium)负责维护,该机构致力让Unicode标准取代既有的字符编码方案,因为既有方案编码空间有限,亦不适用于多语环境。
Unicode伴随着通用字符集ISO/IEC 10646的标准而发展,同时也以书本的形式[3]对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2022年9月公布的15.0.0[4],已经收录超过14万个字符(第十万个字符在2005年获采纳)。Unicode标准不仅仅只是为文字指定代码。除了涵盖视觉上的字形、编码方法、标准的字符编码资料外,联盟官方出版品还包含了关于各书写系统的细节及呈现方式,如规范化的准则、拆分、测序、绘制、双向文本显示、书写方向、字符特性(如大小写字母)等等。此外还提供参考资料和视觉图像,以帮助开发者和设计师正确应用标准。
Unicode备受认可,为ISO纳入国际标准,成为通用字符集,即 ISO/IEC 10646。Unicode兼容ISO/IEC 10646,能完整对应各个版本标准[5][6]。Unicode广泛应用于电脑软件的国际化与本地化过程。很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java编程语言以及现代操作系统,都采用Unicode来编码。Unicode最普遍的编码格式是和ASCII兼容的UTF-8,以及和UCS-2兼容的UTF-16。
起源与发展
Unicode为解决传统字符编码方案的局限而产生,例如ISO 8859-1所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。很多传统的编码方式都有共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。
Unicode编码包含了不同写法的字,如“ɑ/a”、“強/强”、“戶/户/戸”。然而在汉字方面引起了一字多形的认定争议,详见中日韩统一表意文字。
在文字处理方面,统一码为每一个字符而非字形定义唯一的代码(即一个整数)。换句话说,统一码以一种抽象的方式(即数字)来处理字符,并将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。
目前,几乎所有电脑系统都支持基本拉丁字母,并各自支持不同的其他编码方式。Unicode为了和它们相互兼容,其首256个字符保留给ISO 8859-1所定义的字符,使既有的西欧语系文字的转换不需特别考量;并且把大量相同的字符重复编到不同的字符码中去,使得旧有纷杂的编码方式得以和Unicode编码间互相直接转换,而不会丢失任何信息。举例来说,全角格式区段包含了主要的拉丁字母的全角格式,在中文、日文、以及韩文字形当中,这些字符以全角的方式来呈现,而不以常见的半角形式显示,这对竖排文字和等宽排列文字有重要作用。
在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面里的所有字符,要用四个数字(即2字节,共16位,例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五或六个数字。旧版的Unicode标准使用相近的标记方法,但却有些微小差异:在Unicode 3.0里使用“U-”然后紧接着八个数字,而“U+”则必须随后紧接着四个数字。
编码范围
文字范围
0000-007F:C0控制符及基本拉丁文(C0 Control and Basic Latin)
0080-00FF:C1控制符及拉丁文补充-1(C1 Control and Latin 1 Supplement)
0100-017F:拉丁文扩展-A(Latin Extended-A)
0180-024F:拉丁文扩展-B(Latin Extended-B)
0250-02AF:国际音标扩展(IPA Extensions)
02B0-02FF:空白修饰字母(Spacing Modifiers)
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-077F:西非书面语言(N'Ko)
0800-085F:阿维斯塔语及巴列维语(Avestan and Pahlavi)
0860-087F:曼达安语(Mandaic)
0880-08AF:撒马利亚语(Samaritan)
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)
D80-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:鞑靼语(Cham)
1900-194F:林布文(Limbu)
1950-197F:德宏傣语(Tai Le)
1980-19DF:新傣仂语(New Tai Lue)
19E0-19FF:高棉语记号(Khmer Symbols)
1A00-1A1F:布吉文(Buginese)
1A20-1A5F:巴塔克文(Batak)
1A80-1AEF:兰纳文(Lanna/Tai Tham)
1B00-1B7F:巴厘语(Balinese)
1B80-1BB0:巽他语(Sundanese)
1BC0-1BFF:救世苗文(Pahawh Hmong)
1C00-1C4F:雷布查语(Lepcha)
1C50-1C7F:奥尔其基语字母(Ol Chiki)
1C80-1CDF:曼尼普尔语(Meithei/Manipuri)
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 Form)
2190-21FF:箭头(Arrows)
2200-22FF:数学运算符(Mathematical Operator)
2300-23FF:杂项工业符号(Miscellaneous Technical)
2400-243F:控制图片(Control Pictures)
2440-245F:光学识别符(Optical Character Recognition)
2460-24FF:封闭式字母数字(Enclosed Alphanumerics)
2500-257F:制表符(Box Drawing)
2580-259F:方块元素(Block Element)
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)
2E00-2E7F:追加标点(Supplemental Punctuation)
2E80-2EFF:CJK部首补充(CJK Radicals Supplement)
2F00-2FDF:康熙字典部首(Kangxi Radicals)
2FF0-2FFF:表意文字描述符(Ideographic Description Characters)
3000-303F:CJK符号和标点(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笔画(CJK Strokes)
31F0-31FF:日文片假名语音扩展(Katakana Phonetic Extensions)
3200-32FF:封闭式CJK文字和月份(Enclosed CJK Letters and Months)
3300-33FF:CJK兼容(CJK Compatibility)
3400-4DBF:CJK统一表意符号扩展-A(CJK Unified Ideographs Extension-A)
4DC0-4DFF:易经六十四卦符号(Yijing Hexagrams Symbols)
4E00-9FFF:CJK统一表意符号(CJK Unified Ideographs)
A000-A48F:彝文音节(Yi Syllables)
A490-A4CF:彝文字根(Yi Radicals)
A500-A61F:瓦伊语(Vai)
A660-A6FF:统一加拿大土著语音节补充(Unified Canadian Aboriginal Syllabics Supplement)
A700-A71F:声调修饰字母(Modifier Tone Letters)
A720-A7FF:拉丁文扩展-D(Latin Extended-D)
A800-A82F:锡尔赫特文字母(Syloti Nagri)
A840-A87F:八思巴字(Phags-pa)
A880-A8DF:索拉什特拉语Saurashtra
A900-A97F:爪哇语(Javanese)
A980-A9DF:查克玛语(Chakma)
AA00-AA3F:Varang Kshiti
AA40-AA6F:索拉索姆字母(Sorang Sompeng)
AA80-AADF:尼瓦尔语(Newari)
AB00-AB5F:越南傣语(Vi?t Thái)
AB80-ABA0:克耶字母(Kayah Li)
AC00-D7AF:朝鲜文音节(Hangul Syllables)
D800-DBFF:High-half zone of UTF-16
DC00-DFFF:Low-half zone of UTF-16
E000-F8FF:自行使用区域(Private Use Zone)
F900-FAFF:CJK兼容象形文字(CJK Compatibility Ideographs)
FB00-FB4F:字母表达形式(Alphabetic Presentation Form)
FB50-FDFF:阿拉伯表达形式A(Arabic Presentation Form-A)
FE00-FE0F:变量选择符(Variation Selector)
FE10-FE1F:竖排形式(Vertical Forms)
FE20-FE2F:组合用半符号(Combining Half Marks)
FE30-FE4F:CJK兼容形式(CJK Compatibility Forms)
FE50-FE6F:小型变体形式(Small Form Variants)
FE70-FEFF:阿拉伯表达形式B(Arabic Presentation Form-B)
FF00-FFEF:半型及全型形式(Halfwidth and Fullwidth Form)
FFF0-FFFF:特殊(Specials)
10000–1FFFF:第1辅助平面,多文种补充平面(Supplementary Multilingual Plane, SMP)
20000–2FFFF:第2辅助平面,表意文字补充平面(Supplementary Ideographic Plane, SIP)
30000–3FFFF:第3辅助平面,表意文字第三平面(Tertiary Ideographic Plane, TIP)
40000–DFFFF:第4-13辅助平面,尚未使用
E0000–EFFFF:第14辅助平面,特别用途补充平面(Supplementary Special-purpose Plane, SSP)
F0000–FFFFF:第15辅助平面,保留作为私人使用区(Private Use Area, PUA)
100000–10FFFF:第16辅助平面,保留作为私人使用区(Private Use Area, PUA)
注意:表意文字
3400-4DBF/4E00-9FFF/20000-3FFFF:中日韩越统一表意文字(CJKV Unified Ideographs)
ASCII码
大多数计算机采用美国标准信息交换码(ASCII码),它是表示所有大小写字母、数字、标点符号和控制字符的7位编码方案。统一码包含ASCII码,'\u0000'到'\u007F'对应全部128个ACSII字符。在JAVA中可以使用统一码。