字符集与编码
一.字符集与编码之间的关系
1.为了在计算机中存储与处理,必须对字符进行数字化编码。
2.字符集规定了包含哪些字符,每个字符的值是什么
3.编码规定了对于这些值,如何存储
4.有些标准同时规定了字符集及其编码
如:目前使用最广泛的西文字符集及其编码是ASCII 字符集和ASCII码(ASCII是American Standard Code for Information Interchange的缩写),它同时也被国际标准化组织(International Organization for Standardization, ISO)批准为国际标准
5.有些标准同一个字符集可以有多种编码格式
二.字符集及编码
1.SBCS (single byte character set)
1.1 ASCII
(1).7位编码,范围0x00-0x7F
(2).码值32-127(0x20-0x7F)
(3).0x00-0x1F 之间的为控制字符,每个字符有一个缩写的名字
(4).数字,大写字母,小写字母的编码都是连续的
目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码( ASCII 是American Standard Code for Information Interchange 的缩写),它同时也被国际标准化组织( International Organization for Standardization, ISO )批准为国际标准。
基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。
标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。
下表展示了基本 ASCII 字符集及其编码:
字母和数字的 ASCII 码的记忆是非常简单的。
我们只要记住了一个字母或数字的ASCII 码(例如记住 A 为 65 , 0 的 ASCII 码为 48 ),知道相应的大小写字母之间差 32 ,就可以推算出其余字母、数字的 ASCII 码。
虽然标准 ASCII 码是 7 位编码,但由于计算机基本处理单位为字节( 1byte = 8bit ),所以一般仍以一个字节来存放一个 ASCII 字符。
每一个字节中多余出来的一位(最高位)在计算机内部通常保持为 0 (在数据传输时可用作奇偶校验位)。
由于标准 ASCII 字符集字符数目有限,在实际应用中往往无法满足要求。
为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将ASCII 字符集扩充为 8 位代码的统一方法。
ISO 陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符
的编码均为高位为 1 的 8 位代码(即十进制数 128~255 ),称为扩展 ASCII 码。
1.2 EBCDID
广义二进制编码的十进制交换码(EBCDIC,Extended Binary Coded Decimal Interchange Code)(读作"ehb-suh-dik"或"ehb-kuh-dik"),是字母或数字字符的二进制编码,它是IBM为更大型的操作系统开发的。
EBCDIC是用于IBM S/390服务器上的IBMOS/390操作系统的文本文件的编码。
在一个EBCDIC文件中,每个字母或数字字符都用一个8位的二进制数来表示(八个由0和1组成的字符串)。
共有256个可能的字符(字母、数字和一些特殊字符)。
IBM的个人电脑和工作站操作系统不使用IBM所有的EBCDIC编码。
相反的,它们使用文本的工业标准编码,ASCII码。
转化程序允许不同的操作系统将文件从一种编码转化成另一种编码。
1.3 ISO8859-x
(1)x=1~15,是一系列标准,对应13种不同的语言
(2)ISO-8859-x 是单字节编码,8位编码
(3)0x00-0x7F部分跟ASCII兼容
(4)0x80及以上部分部分除了少数字符,用来编码相应的语言的专有字符,各不相同。
(5)ISO-8859-1 最常见,收集了西欧字符
(6)因为没有一个全集字符集,ISO-8859-X之间不能互相转换。
2.DBCS (double byte character set)
2.1 GB2312
(1)兼容ASCII的部分用单字节编码
(2)汉字部分的编码根据区位码进行,用两字节表示,第一个字节等于区位码的区码+0xA0,第一个字节等于区位码的位码+0xA0,因此每个字节都在0xA0以上
(3)7445个符号,支持6763个简体汉字和682个符号
最常用的称为一级汉字,3755个,按照拼音排序
次常用的称为二级汉字,3008个,按照部首排序
2.2 GBK
(1)规范,没能成为标准,但随着Windows流行很广泛。
(2)与GB2312向下兼容
(3)比GB2312增加了大量的繁体字和异体字
(4)首字节扩展到0x81-0xFE,第二个字节扩展到0x40-0xFE。
23940个码位,包含了21003个汉字
2.3 BIG5
(1) 1984年由中华民国财团法人信息工业策进会为五大中文套装软件(宏碁、神通、佳佳、零壹、大众)所设计的中文内码
(2)主要用于港澳台地区以及另外一些海外华人
(3)收录了13060个中文字
(4)不支持简体字
(4)“高位字节”使用了0x81-0xFE,“低位字节”使用了0x40-0x7E,及0xA1-0xFE
3.MBCS multiple byte character set
UTF-8
ISO18030
总结一下,Unicode字符集规定的标准编码方案是UCS-2(UTF-16),用两个字节表示一个Unicode字符,而事实上,UCS-4 (UTF-32)也已经被提出了,用4个字节表示一个Unicode字符,然后,一个常用的Unicode编码方案—UTF-8,它用1到4(6)位的变长字节来表示一个Unicode字符,并可以从一个简单的转换算法从UTF-16直接得到。
这三个编码方案(Encoding)都对应于Unicode字符集(Charset)。