为了使不同的字符集能够处理好不同的文字和语言,必须满足:
1. 不同时引用多种文字。
2. 不与使用不同字符集的人交换文件。
由于Mac和PC机都使用不同的字符集,越来越多的人无法遵循以上原则。很明显的是需要一种得到大家的认可并且编码了全世界各种文字的字符集。建立这样的字符集很难,需要对成百上千种语言和文字有细致的了解。要使软件开发商们同意使用这种字符集就更难了。不过这方面的努力一直在进行,终于创建了一个符合要求的字符集��Unicode。而且主要卖方(微软、苹果、IBM、Sun、Be等)正逐步趋向于使用它。XML把Unicode当作自己的默认字符集。
Unicode使用0~65,535的双字节无符号数对每一个字符进行编码。目前已经定义了40,000多个不同的Unicode字符,剩余25,000个空缺留给将来扩展之用。其中大约20,000个字符用于汉字,另外11,000左右的字符用于韩语音节。Unicode中0~`255的字符与Latin-1中的一致。
表7-6 Unicode文字块
文 字
范 围
目 的
Basic Latin
基本拉丁语
0-127
ASCII码,美式英语
Latin-1 Supplement
拉丁语补充-1
126-255
ISO Latin-1前半部分结合Basic Latin能处理丹麦语、荷兰语、英语、法罗群岛语、佛兰德语、德语、夏威夷语、冰岛语、印度尼西亚语、爱尔兰语、挪威语、葡萄牙语、西班牙语、斯瓦西里语和瑞典语
Latin Extended-A
拉丁文扩展集-A
256-383
该字符块增添了ISO 8859字符集Latin-2、Latin-3、Latin-4中的字符,而且是Basic Latin和Latin-1没有的字符。同它们结合能够编码南非荷兰语、法国布里多尼语、巴斯克语、加泰罗尼亚语、捷克语、世界语、爱沙尼亚语、法语、Friesland语、格陵兰岛语、匈牙利语、拉脱维亚语、立陶宛语、马耳它语、波兰语、普罗旺斯语、罗马尼亚语、吉普塞语、斯洛伐克语、斯洛文尼亚语、土耳其语和威尔士语
Latin Extended-B
拉丁文扩展集-B
383-591
大部分字符用于扩展Latin文字以处理使用非传统文字写的语言,包括许多非洲语言、克罗地亚连字符,与塞尔维亚古斯拉夫字母、中国的拼音和Latin-10中的Sami characters相匹配
IPA扩展字符集
592-687
国际音标字母
间距调节字符
686-767
通常能够改变前面字母发音的小符号
可识别的连接字符
766-879
不独立存在,一般与前面的字母连用(放置在上边)的可识别的记号,如:~、‘and ??
希腊
880-1023
基于ISO 8859-7的现代希腊语,同时提供古埃及语字符
续表
文 字
范 围
目 的
古斯拉夫
1024-1279
基于ISO 8859-5上的语言,俄语和多数斯拉夫语(乌克兰语、Byelorussian等),前苏联的许多非斯拉夫语言(Azerbaijani,Ossetian,卡巴尔德语,Chechen,Tajik等).几种语言(库尔德语,阿布哈西亚语)需要Latin和古斯拉夫字母
美国
1326-1423
美语
希伯来
1424-1535
希伯来语(古典和现代)、依地语、Judezmo、早期美语。
阿拉伯
1536-1791
阿拉伯语,波斯语、Pashto、Sindhi、库尔德语和早期土耳其语
梵文字母
2304-2431
梵语,北印度语,尼泊尔语和印度次大陆语言,包括: Awadhi,Bagheli,Bhatneri,Bhili,Bihari,BrajBhasha,Chhattisgarhi,Garhwali,Gondi,Harauti,Ho,Jaipuri,KachchhiKanauji,Konkani,Kului,Kumaoni,Kurku,Kurukh,Marwari,Mundari,Newari,Palpa,and Santali
孟加拉语
2432-2559
一种北印度文字,使用于印度的西孟加拉州和孟加拉国的孟加拉语、阿萨姆语、Daphla、Garo、Hallam、Khasi、Manipuri、Mizo、Naga、Munda、Rian、Santali
Gurmukhi
2560-2687
Punjabi
Gujarati
2686-2815
Gujarati
Oriya
2816-2943
Oriya、Khondi、Santali
泰米尔语
2944-3071
泰米尔语和Badaga、使用于南印度、斯里兰卡、新加坡和马来西亚部分地区
Telugu
3072-3199
Telugu、Gondi、Lambadi
埃纳德语
3200-3327
埃纳德语、Tulu
Malalayam
3326-3455
Malalayam
泰国语
3584-3711
泰国语、Kuy、Lavna、巴利语
老挝语
3712-3839
老挝语
西藏语
3840-4031
喜玛拉雅语包括西藏语、Ladakhi和Lahuli
乔治亚语
4256-4351
乔治亚语,黑海边乔治亚前苏维埃共和国语
Hangul Jamo
4352-4607
朝鲜、韩国音节的字母组成部分
Latin的附加扩展集
7680-7935
标准的Latin字母如E和Y与可识别的记号组合在一起,除了用于越南语元音中,很少使用
希腊语扩展集
7936-8191
希腊字母与可识别记号的组合,用于正统的希腊语中
通用的标点符号
8192-8303
各种标点符号
上标和下标
8304-8351
普通的上标和下标
货币符号
8352-8399
货币符号,一般在别的地方找不到
用于符号的组合记号
8400-8447
给多个字符做记号
像字母的符号
8446-8527
像字母的符号,如?
数表
8526-8591
分数和罗马数字
箭头符号
8592-8703
箭头符号
数学符号
8704-8959
不常出现的数学运算符
技术杂项
8960-9039
APL编程语言需要的符号和其他各种技术符号
控制图形
9216-9279
ASCII控制字符图形,常用于调试
光学字符识别
9280-9311
在打印支票上的OCR-A(光学字符识别)和MICR(磁性墨水字符识别)符号
续表
文 字
范 围
目 的
附加字符
9312-9471
放在圆和括号中的字母和数字
画方框字符
9472-9599
用于在等间距终端上画方框的字符
块元素
9600-9631
用于DOS和其他用途的等间距终端图形
几何形状
9632-9727
正方形、菱形、三角形等
杂项符号
9726-9983
纸牌、象棋、占卜等
Dingbats
9984-10175
Zapf Dingbat字符
CJK符号和标点
12286-12351
用于中国\日本和韩国的标点符号
平假名
12352-12447
日文字母的草体.
片假名
12446-12543
非草体的日文字母,通常用于西方的外来词汇,像"keyboard"
汉语拼音字母
12544-12591
中国的发音字母表
Hangul Compatibility Jamo
12592-12687
与KSC 5601代码兼容的韩国字符
Kanbun
12686-12703
在日文中用于指示古典中文的阅读顺序的记号
括起来的CJK字母和月份
12800-13055
用圆和括号括起来的Hangul和片假名字符
CJK Compatibility
13056-13311
只用于编码KSC 5601和CNS 11643的字符
统一的CJK象形文字
19966-40959
用于中文、日文和韩文的Han象形文字
Hangul音节
44032-55203
一种韩国音节
Surrogates
55296-57343
目前还不能使用,将来可用于扩展Unicode,使它包括超过百万的字符
个人使用
57344-63743
软件开发者可以在此包含自己的术语,与正在执行的字符不同
CJK兼容性象形文字
63744-64255
为了保持与现有的标准的一致性如KSC 5601,而使用的一些汉字象形文字
字母的表现方式
64256-64335
使用于Latin、美语和希伯来语中的连字和变种
阿拉伯表象形式
64336-65023
各种阿拉伯字符的变种
组合半记号
65056-65071
把跨越多个字符的多个可识别记号连成一个可识别的记号
CJK兼容性形式
65072-65103
用于台湾汉字象形文字
小型变种
65104-65135
用于台湾的ASCII标点符号的小的版本
附加的阿拉伯表象形式
65136-65279
各种阿拉伯字符变种
半宽和全宽形式
65280-65519
能够在中文和日文的不同代码间转换的字符
特殊字符
65520-65535
字节顺序记号和零宽度的非中断性空格,常用于Unicode 文件的开始
Unicode使用双字节表示一个字符,因此使用Unicode的英文文本文件大小是使用ASCII码或Latin-1文件的两倍。UTF-8是一个压缩的Unicode版本,使用单个字节表示最常用的字符,即0到127的ASCII字符,较少见的字符使用三个字节表示,特制是韩国音节和汉字。如果主要使用英文,UTF-8能够将文件压缩为原来的一半。如果主要使用汉语、朝语或者日语,UTF-8会使文件的尺寸增加50%��因此应当谨慎使用UTF-8。UTF-8几乎不能处理非罗马文字和非CJK文字,如希腊语、阿拉伯语、古斯拉夫语和希伯来语。
XML处理器在没有被预先通知的情况下假定文本数据是UTF-8格式。这意味着XML处理器能够阅读ASCII码文件,但是使用它处理其他格式的文件像MacRoman 或者 Latin-1会有困难。我们很快就能学会如何在短时间内解决这个问题。
Unicode因为没有包含足够多的语言和文字而受到批评,特别是亚洲东部的语言。它只定义了中国、日本、朝鲜和古越南使用的80,000象形文字中的20,000个左右。(现代越南语使用一种罗马字母。)
UCS (Universal Character System)��通用字符系统,也称作ISO 10646,使用四个字节(确切地说是31位)表示一个字符,以给20多亿不同的字符提供足够的空间。这样能容易地覆盖地球上任何一种文字和语言使用的每个字符。而且还可以给每一种语言指定一个完整的字符集,使法语中的“e”不同于英语和德语中的“e”等等。
与Unicode一样,UCS定义了许多不同的变种和压缩形式。纯粹的Unicode有时指USC-2,是双字节的UCS。UTF-16是一种特别的编码,它把一些UCS字符安排在长度变化的字符串中,在这种方式下Unicode(UCS-2)数据不会改变。
UCS超越Unicode的优点主要是理论方面的。在UCS中实际定义过的字符就是Unicode中已有的字符。但是UCS为以后的字符扩充提供了更多的空间。