最详细的字符集介绍

前言
     0)  、  计算机中的信息包括数据信息和控制信息,数据信息又可分为数值和非数值信息。非数值信息和控制信息包括了字母、各种控制符号、图形符号等,它们都以二进制编码方式存入计算机并得以处理,这种对字母和符号进行编码的 二进制代码称为字符代码(Character Code)。计算机中常用的字符编码有ASCII码(美国标准信息交换码)和EBCDIC码(扩展的BCD交换码)。
     1) 、(Unicode与UCS)历史上有两个独立的创立单一字符集的组织:一个是国际标准化组织ISO开展 ISO/IEC 10646项目,名字叫“ Universal Multiple-Octet Coded Character Set”,简称UCS。, 另一个是由统一码联盟多语言软件制造商组成的协会组织的 Unicode 项目——Unicode。 1991年,Unicode联盟与ISO的工作组终于开始讨论Unicode与UCS的合并问题,虽然其后的合并进行了很多年,Unicode初版规范中的很多编码都需要被改写,UCS也需要对码空间的使用进行必要限制,但成果是喜人的。最终,两者统一了抽象字符集(即任何一个在Unicode中存在的字符,在UCS中也存在),且最靠前的65535个字符也统一了字符的编码。对于码空间,两者同意以一百一十万为限(即两者都认为虽然65536不够,但2的31次方又太大,一百一十万是个双方都可接受的码空间大小,也够用,当然,这里说的一百一十万只是个约数),Unicode将码空间扩展到了一百一十万,而UCS将永久性的不使用一百一十万以后的码位。也就是说,现在再讲Unicode只包含65536个字符是不对的(Unicode 标准曾做过修改,以允许那些其表示形式需要超过 16 位的字符。合法代码点 的范围现在是从 U+0000 到 U+10FFFF,即通常所说的 Unicode 标量值,从 U+0000 到 U+FFFF 的字符集有时也称为 Basic Multilingual Plane (BMP)。代码点大于 U+FFFF字符称为增补字符)。除了对已经定义的字符进行统一外,Unicode联盟与ISO工作组也同意今后任何的扩展工作两者均保持同步,到unicode2.0时,unicode的编码和ucs的编码都基本一致。因此虽然从历史的意义上讲Unicode与UCS不是一回事(甚至细节上说也不是一回事),但现在提起Unicode,指代两者均无不妥,也就是说"Unicode"与"UCS"一样
    2)

GB2312编码汉字6763字,是在Windows 95出现以前,国内信息处理普遍采用的编码标准。GBK是在保持GB2312原貌的基础上,将其字汇扩充至ISO 10646中的CJK 20902汉字,同时也就包容了台湾的工业标准Big5中的全部汉字,没有体系结构的变化。而GB18030则不然,它是在GBK的基础上做进一步扩充,不但把CJK-扩展A的6582汉字扩充进去,而且还改变了GBK的体系结构。尽管GB2312、BIG5、GBK在某种程度上依然尚存,但ISO 10646(GB13000/Unicode)已日渐成为主流编码。

     3)查看

工具:

        1,Windows有个系统工具叫做字符映射表,可以查看字体中的可用字符:开始--运行--charmap.

        2,BabelMap【字符映射表/字体浏览工具】比Windows自带的好用?谁知道呢.最新版本的BabelMap支持Unicode6.0.该软件可使用系统上安装的所有字体浏览 Unicode 标准中的所有字符,还带有拼音及部首检字法。

     4)说明

   
   
   
   
        字符集 是一种语言或多个或全部语言中所有不同文字的集合,在中文中尤为明显,GB2312和GBK就是两种中文字符集。
        字体是某种文字不同的美术字形,比如中文的宋体、楷体…………
        字符集和字体有一些关系,比如,微软的宋体就包含了GBK字符集的所有文字,而楷体就只GB-2312中常用的6000多汉字的字形。
        字符集是一个映射表。一个字符是用二进制数字表示的,但具体是什么字符,是根据字符集决定的。
        字库有两种标准 postscript字库truetype字库。这两种字体标准都是采用曲线方式描述字体轮廓,因此都可以输出很高质量的字形。TTF(TrueTypeFont)是一种字库名称。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。
 
下面逐一分析各个字符集:
 
ASCII  (国际标准ISO-646)

         ASCII规定用7位二进制数字来表示英文字符,ASCII被定为国际标准之后的代号为ISO-646。由于ASCII码只使用了7个二进制位,也就是说一个字节可以表示的256个数字中,它仅使用了0~127这128个码位,剩下的128个码位便可以用来做扩展,用来表示一些特定语言所独有的字符,因此对这多余的128个码位的不同扩展,就形成了一系列ISO-8859-*的标准。例如为英语作了专门扩展的字符集编码标准编号为ISO-8859-1,也叫做Latin-1,为希腊语所作的扩展编号为ISO-8859-7等,完整的列表可以参考《Java Internationalization》一书。

ASCII码于1961年提出,用于在不同计算机硬件软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。比较EBCDIC。其中95个字符可以显示。另外33个不可以显示。 标准ASCII码为7位,扩充为8位。
目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码( ASCII 是 American Standard Code for Information Interchange 的缩写),它同时也被国际标准化组织( International Organization for Standardization, ISO )批准为国际标准。
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10和13分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序而对文本显示有不同的影响。32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122为26个小写字母,其余为一些标点符号、运算符号等。

 
 
MBCS(Muilti-Bytes Charecter Set,多字节字符集)
   
   
   
   
为了扩充ASCII编码,以用于显示本国的语言,不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码,又称为"MBCS(Muilti-Bytes Charecter Set,多字节字符集)"。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,所以在中文 windows下要转码成gb2312,gbk只需要把文本保存为ANSI 编码即可。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。一个很大的缺点是,同一个编码值,在不同的编码体系里代表着不同的字。这样就容易造成混乱。导致了unicode码的诞生。
其中每个语言下的ANSI编码,都有一套一对一的编码转换器,Unicode变成所有编码转换的中间介质。所有的编码都有一个转换器可以转换到Unicode,而Unicode也可以转换到其他所有的编码。



UNICODE与UCS(国际通用字符集)

        Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号

Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。 

比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。 

    它们造成的结果是:

     1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。

     2)unicode在很长一段时间内无法推广,直到互联网的出现。       

        为什么使用Unicode其实原因很简单,因为Unicode比ANSI好用。 自从Windows2K开始,Win的系统内核开始完全支持并完全应用Unicode编写,所有ANSI字符在进入底层前,都会被相应的API转换成Unicode。所以,如果你一开始就使用Unicode,则可以减少转换的用时和RAM开销。 对于JAVA/.NET等这些“新”的语言来说,内置的字符串所使用的字符集已经完全是Unicode最重要的是,目前世界上大多数程序用的字符集都是Unicode,因为Unicode有利于程序国际化和标准化。

          

        Unicode的另一个设计目标,对今天影响深远,那就是对所有字符都采用16位编码(即用一个大小不超过2的16次方的整数数字给每个字符编号,注意从这个意义上也可以看出,Unicode是一种编码字符集,而非字符集编码)。说这个设计目标对现今影响深远,完全不是表扬,因为到后来连Unicode的设计者也发现,16位编码仅有65536个码位,远远不能容纳世界上所有的字符,但当意识到这个问题的时候,Unicode大部分的规范已经制定完毕,也有相当程度的普及,完全推倒重来是不现实的。这成了一个遗留问题,也是surrogate pair这种蹩脚解决方案的发端。
      ISO一开始就确定了UCS是一个31位的编码字符集(即用一个大小不超过2的31次方的整数数字为每个字符编号),这回真的足以容纳古往今来所有国家,所有语言所包含的字符了。虽然后来他们意识到,2的31次方个码位又实在太多了
        unicode在编码上和UCS保持一致,在实现上有自己的规则,而UCS只定义了编码标准。unicode的实现形式上 有UTF-8,UTF-16,UTF-32,还有UTF-7等。UCS编码也有自己的格式:UCS-2和UCS-4等等。unicode的编码可以和UCS-2和UCS-4保持一致。但是又略有不同。UTF-16是UCS-2的扩展,UTF-32是UCS-4的子集。也就是说,UTF-16的实现上对code point的支持范围超过UCS-2,而UTF-32对code point的表示却又在UCS-4的范围之内。
     在编码层面上,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。
     UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。
     UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。
     group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。
     将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。
     Unicode最初支持16位的code point,后来发现不够用,于是用UTF-16扩展UCS-2。在BMP区域内的一片连续空间(U+D800~U+DFFF)的码位区段是永久保留不映射到字符,因此UTF-16利用保留下来的0xD800-0xDFFF区段的码位来对辅助平面的字符的码位进行编码。
所以,utf-16能表示的范围最大能到U+10FFFF,包含1个基本平面(BMP)和16个辅助平面。

     理论上UCS-4编码范围能达到U+7FFFFFFF,但是因为unicode和iso达成共识,只会用17个平面内的字符,所以UTF-32是UCS-4的子集。但是UTF-16是定长的编码,和UCS-4无论实现和编码都是基本一样的。当前,Unicode深入人心,且UTF-8大行其道,UCS编码基本被等同于UTF-16,UTF-32了,所以目前UCS基本谈出人们的视野中。(Windows NT用的就是UCS-2)




UTF-8

    UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。UTF-8是Unicode即(UCS)的实现方式之一。 

    UTF(UCS transformation format) 代表“通用字符集转换格式”。

        

        UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    UTF-8的编码规则很简单,只有二条: 

        1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。 
        2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。 

        下表总结了编码规则,字母x表示可用编码的位。 

        Unicode符号范围 | UTF-8编码方式 
        (十六进制) | (二进制) 
        --------------------+--------------------------------------------- 
        0000 0000-0000 007F | 0xxxxxxx 
        0000 0080-0000 07FF | 110xxxxx 10xxxxxx 
        0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 
        0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
        下面,还是以汉字“严”为例,演示如何实现UTF-8编码。 
        已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
        
        Unicode与UTF-8之间的转换  
       可以看到“严”的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。 在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击“文件”菜单中的“另存为”命令,会跳出一个对话框,在最底部有一个“编码”的下拉条。 
        里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。 
        1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。 

        2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。 

        3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。 

        4)UTF-8编码,也就是上一节谈到的编码方法。 

        选择完”编码方式“后,点击”保存“按钮,文件的编码方式就立刻转换好了。 

         Little endian和Big endian 的区别
         上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字”严“为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。 

        这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。 

        因此,第一个字节在前,就是”大头方式“(Big endian),第二个字节在前就是”小头方式“(Little endian)。 
        那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。 如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。 
        
         打开”记事本“程序Notepad.exe,新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。 然后,用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。 
1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。 
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。 
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。 
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。




GB2312-80国家标准 ——信息交换用汉字编码字符集--基本集1980年

        1980年颁布了《信息交换用汉字编码字符集—基本集》的国标交换码,国家标准号为:GB2312-80,选入了6763个汉字,分为两级,一级字库中有3755个,是常用汉字,二级字库中有3008个,是次常用汉字;还选入了682个字符,包含有数字、一般符号、拉丁字母、日本假名、希腊字母、俄文字母、拼音符号、注音字母等。以前我国大陆的各种中文DOS版本、Windows3.1 /3.2版本,装入的字库都是国标一二级字库。

《GB2312-80》对 7445 个图形字符作了二进制数编码。

GB2312 也是ANSI编码里的一种,对ANSI编码最初始的ASCII编码进行扩充,为了满足国内在计算机中使用汉字的需要,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。其中最有影响的是于1980年发布的《信息交换用汉字编码字符集 基本集》,标准号为GB 2312-1980,因其使用非常普遍,也常被通称为国标码。GB2312编码通行于我国内地;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持GB 2312。
GB 2312是一个 简体中文字符集 ,由6763个常用汉字和682个全角的非汉字字符组成。其中汉字根据使用的频率分为两级。一级汉字3755个,二级汉字3008个。由于字符数量比较大,GB2312采用了二维矩阵编码法对所有字符进行编码。首先构造一个94行94列的方阵,对每一行称为一个“区”,每一列称为一个“位”,然后将所有字符依照下表的规律填写到方阵中。这样所有的字符在方阵中都有一个唯一的位置,这个位置可以用区号、位号合成表示,称为字符的区位码。如第一个汉字“啊”出现在第16区的第1位上,其区位码为1601。因为区位码同字符的位置是完全对应的,因此区位码同字符之间也是一一对应的。这样所有的字符都可通过其区位码转换为数字编码信息

BIG5 ——大五码》 1984年

        BIG-5码是通行于台湾香港地区的一个繁体编码方案,俗称“大五码”。地区标准号为:CNS11643,这就是人们讲的BIG-5码

        BIG-5码收录汉字13053个,分为常用字和次常用字两部分,各部分中的汉字按笔画/部首排列。其中常用字5401个,包括台湾教育管理部门颁布的《常用汉字标准字体表》中的全部汉字4808个,台湾中小学教科书常用字587个,异体字6个;次常用字7652个,包括台湾教育管理部门颁布的《次常用汉字标准字体表》的全部汉字6341个,《罕用汉字标准字体表》中使用频率较高的字1311个。

  BIG-5码的编码范围是 0x8140~0xFE7E、0x81A1~0xFEFE,其中 0xA140~0xA17E、0xA1A1~0xA1FE 是图形符号区,0xA440~0xF97E、0xA4A1~0xF9FE 是汉字区。


ISO10646.1国际标准 ——

通用多八位编码字符集

(Universal Character Set, UCS) 1993年

        国际标准化组织为了将世界各民族的文字进行统一编码,制定了UCS标准。

际标准ISO10646.1-1993定义了通用八位编码字符集(Universal Character Set, UCS),用于世界上各种语言的书面形式以及附加符号的表示、传输、交换、处理、存储、输入及显现。 UCS是所有其它字符集标准的一个超集,它保证也其它字符集双向兼容,即编码间相互转换不会丢失任何信息。UCS字符集U+0000到U+007F与US-ASCII是一致的。

    1. UCS 的总体结构

        UCS 编码字符集的总体结构是一个四维编码空间,它包含 00 ~ 7F 共 128 个三维组,每一个三维组中包含 00 ~ FF 共 256 个二维平面,每一个二维平面包含 00 ~ FF 共 256 个一维行,每行共 256 个字位(00 ~ FF),每个字位用一个字节二进制数表示。因此在 UCS 中每一个字符用 4 个二进制数编码,以确定每个字符在编码空间的组、平面、行和字位。上述四个 8 位二进制数编码形式称为 UCS 的四八位正则形式,记作 UCS-4

    2. 基本多文种平面

        在UCS 编码空间中 00组的 00平面称为基本多文种平面。在此平面包含了字母文字、音节文字和表意文字中通常使用的字符以及各种符号和数字。

基本多文种平面的组编码为 00H。UCS 规定当正则形式的组、平面编码为 00H 时可以省略,因此安排在基本多文种平面上的字符可用两个字节的二进制数来表示,形成双八位编码字符集,记作 UCS-2

        基本多文种平面分成 A、I、O、R 四个区。

        A 区:代码位置从 0000 ~ 4DFF,共 19903 个字位。此区用于字母文字、音节文字以及各种符号的编码,其中 0000 ~ 001F 和 007E ~ 009F 保留用于控制字符。

        I 区:代码位置从 4E00 ~ 9FFF,共 20992 个字位。此区用于中、日、韩()统一的表意文字,即中国、日本、韩国等三国汉字的编码。

        O 区:代码位置从 A000 ~ DFFF,共 16384 个字位。此区目前未用,留作未来的标准化。

        R 区:代码位置从 E000 ~ FFFD,共 8190 个字位。此区是限制使用区,用于专用字符、变形显现形式和兼容字符的编码。

    3. CJK 统一汉字的编码

        在 I 区统一编码的汉字共 20902 个,按部首—比画排序。其中中国用汉字约 17000 个,源字集是 GB 基本集简化字,第一、三、五辅助集繁体字,现代汉语通用字表,邮电通信字符集,台湾地区的 CNS11643 《通用汉字标准交换码》,此外还吸收了香港用字 58 个,延边地区朝鲜族使用的“吏读”字 92 个。CJK 统一汉字编码字符集中日本用汉字和韩国用汉字源字集分别为日、韩两国的有关标准。

    4. CJK-扩展A 

        国际标准化组织在 ISO10646-2000 的基本平面(BMP 或者 Unicode 3.0, 下简称 Unicode)编入了27,564 汉字(U+4E00~U+9FFF以及U+3400~U+4DFF),既是2000年3月在GB18030颁布时所建议支持的字汇。其中U+3400~U+4DFF部分的6582个汉字又称为CJK-扩展A。

同时国际标准化组织还在ISO10646-2000 的第二平面扩展了42,711汉字(又称为CJK-扩展B)。该42,711 汉字的编码表已基本确定,尽管不排除未来微小变动的可能性。也就是说,到目前为止Unicode已编码的汉字达七万多字。

    5. CJK-扩展B

         

国际标准化组织还在ISO10646-2000 的第二平面扩展了42,711汉字(又称为CJK-扩展B

CJK-扩展B 的42,711汉字编排在ISO10646-2000的第二平面,所以编码需要4个字节。为存取处理这些4字节字符,在Unicode 中引入了Surrogate 机制(在ISO10646-2000中命名为UTF-16)根据这样一种机制, 在Unicode中用两个16位编码就可以对ISO10646-2000 第二平面中的汉字进行存取。Microsoft 从Windows2000 (在Windows 98, Windows ME 及 Windows NT4 中没有)开始对这样一种机制提供支持。只要有相应的输入法和字库并且在应用程序中给予相应的支持,就应该能够输入显示上述提到的汉字。但是,要想得到对Surrogate全面的支持,用户需先下载并安装Surrogate Package ( Surrogate支持包 )。

支持CJK-扩展B汉字显示的字体:

    1、简体中文版Microsoft Office XP及更高版本附带了宋体-超大字符集中文字体 ,支持上面提到的全部27,564个汉字以及在第二平面中(42,711)选出的36,862个在中国大陆、香港特别行政区(以及部分台湾地区)使用的汉字。因此包括西文等常用字符在内,宋体-方正超大字符集共包括65,531个字符。换言之,它支持CJK-扩展A中的全部汉字和CJK-扩展B中的部分汉字。

    2、繁体中文版Microsoft Office XP及更高版本则提供了支持超大字符集的细明体(MingLiU Ext-B 与 PMingLiU Ext-B,可以从已装有Office的电脑中单独找到该字体文件,复制到本机Windows系统下的Fonts文件夹中即可。需要注意的是,此字体全面支持CJK-扩展B中的42711字,但不支持CJK-扩展A中的6582字。  

    3、海峰五笔UNICODE超大字符集字体支持包:完美结合了大陆与港台的数种主流字体,支持GBK、GB-18030、CJK-B各大字符集内全部简、繁体汉字的显示, 通用于Windows 98/NT/2000/ME/XP/2003系统。安装此包之后,用宋体即可显示任何汉字。




GB13000.1国家标准   ——《CJK 统一汉字编码字符集》即

GBK(“国家标准扩展”的拼音缩写)

1993年

        国

家标准 GB13000.1 是完全等同于国际标准 ISO10646.1,

际标准化组织为了将世界各民族的文字进行统一编码,制定了UCS标准。根据这一标准,中、日、韩三国共同制定了《CJK统一汉字编码字符集》,其国际标准号为:ISO/IEC10646,国家标准号为:GB13000-90,该汉字编码字符集就是通常人们所说的大字符集,它编入了20902个汉字,收集了大陆一二级字库中的简体字,台湾《通用汉字标准交换码》中的繁体字,58个香港特别用字和92个延边地区朝鲜族“吏读”字,甚至涵盖了日文与韩文中的通用汉字,满足了方方面面的需要。Windows95/98/NT/2000中都装入了大字符集汉字库,人们一般称它为GBK(“国家标准扩展”的拼音缩写)

        汉字扩展内码规范--GBK 的目的是解决汉字收字不足、简繁同平面共存、简化代码体系间转换等汉字信息交换的瓶颈问题,并在保持已有应用软件兼容性的前提下,向最终的国际统一双字节字符集标准 ISO10646.1 迈进。

        1.扩展的汉字内码规范的原则

              与 《信息交换用汉字编码字符集--基本集》即国家标准 的内码体系标准完全兼容。

              在字汇一级支持 ISO 10466.1/《CJK统一汉字编码字符集》即国家标准 的全部 ‍汉字。

              非汉字符号同时涵盖大部分常用的 非汉字符号。

        2.规范的名称与简称

              中文名称:汉字内码规范

              英文名称:Chinese Internal Code Specification

              简称: GBK ( K 是“扩展”的汉语拼音第一个字母)

        3.规范的内容

              适用范围:

作为非 UCS (ISO 10646) 体系的代码页(Code Page),适用于中文信息的处理、交换、存储、显现、输入和输出。

GB18030-2000国家标准  ——信息交换用汉字编码字符集基本集的扩充2000年

        2000年3月,国家信息产业部和质量技术监督局在北京联合发布了《信息技术和信息交换用汉字编码字符集、基本集的扩充》,国家标准号为:GB18030-2000,收录了27000多个汉字,还收录了藏、蒙、维等主要少数民族的文字,该标准于2000年12月31日强制执行。 GB 18030-2000 作为 GBK for Unicode 3.0 的更新而诞生,并且 作为GB2312-1980《信息交换用汉字编码字符集 基本集》的扩展,向下兼容

GB18030 编码是一二四字节变长编码:一字节部分从 0x0~0x7F 与ASCII 编码兼容。二字节部分, 首字节从 0x81~0xFE, 尾字节从0x40~0x7E 以及0x80~0xFE,与 GBK标准基本兼容。四字节部分, 第一字节从 0x81~0xFE, 第二字节从 0x30~0x39, 第三和第四字节的范围和前两个字节分别相同。四字节部分覆盖了从 0x0080 开始, 除去二字节部分已经覆盖的所有Unicode3.0码位。也就是说, GB18030 编码在码位空间上做到了与Unicode 标准一一对应GB18030是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准,是未来我国计算机系统必须遵循的基础性标准之一。

Base64 
    
    
    
    
有的电子邮件系统(比如国外信箱)不支持非英文字母(比如汉字)传输,

  Base64编码

这是历史原因造成的(认为只有美国会使用电子邮件?)。因为一个英文字母使用ASCII编码来存储,占存储器的1个字节(8位),实际上只用了7位2进制来存储,第一位并没有使用,设置为0,所以,这样的系统认为凡是第一位是1的字节都是错误的。而有的编码方案(比如GB2312)不但使用多个字节编码一个字符,并且第一位经常是1,于是邮件系统就把1换成0,这样收到邮件的人就会发现邮件乱码
为了能让邮件系统正常的收发信件,就需要把由其他编码存储的符号转换成ASCII码来传输。比如,在一端发送GB2312编码->根据Base64规则->转换成ASCII码,接收端收到ASCII码->根据Base64规则->还原到GB2312编码。

你可能感兴趣的:(字符集,字符编码)