1.3.3 计算机中的字符编码
1.ASCII码
计算机中用二进制表示字母、数字、符号及控制符号,目前主要用ASCII码(American Standard Code for Information Interchange),即美国标准信息交换码,已被国际标准化组织(ISO)定为国际标准。
ASCII码有7位ASCII码和8位ASCII码两种。
7位ASCII码称为基本ASCII码,是国际通用的,这是7位二进制字符编码,表示128种字符编码,包括34种控制字符,52个英文大小写字母,0,1,…,9共10个数字,32个字符和运算符(详见表1-2)。用一个字节(8位二进制位)表示7位ASCII码时,最高位为0,它的范围为00000000B~0111111lB。
8位ASCII码称为扩充ASCII码。是8位二进制字符编码,其最高位有些为0,有些为1,它的范围为00000000B~11111111B,因此可以表示256种不同的字符。其中00000000B~01111111B为基本部分,范围为0~127,共128种;10000000B~11111111B为扩充部分,范围为128~255,也有128种。尽管对扩充部分的ASCII码美国国家标准信息协会已给出定义,但在实际中多数国家都将ASCII码扩充部分规定为自己国家语言的字符代码,如中国把扩充ASCII码作为汉字的机内码,如表1-2如示。
表1-2 ASCII码表
续表
说明:表中的高位是指ASCII码二进制的前4位,低位是指ASCII码二进制的后4位,由高位和低位合起来组成一个完整的ASCII码。例如:数字0的ASCII码可以这样查:高位是0011,低位是0000,合起来组成的ASCII码为00110000(二进制),转换成十进制数为48。
2.汉字输入码
汉字输入码,又称“外部码”,简称“外码”,指用户从键盘上输入代表汉字的编码。根据所采用输入方法的不同,外码大体可分为数字编码(如区位码)、字形编码(如五笔字型)、字音编码(如各种拼音输入法)和音形码等等几大类。如汉字“啊”采用五笔字型输入时编码为“kbsk”,用区位码方式输入时编码为“1601”,那么这里的“kbsk”和“1601”就称为外码。
区位码是一种最通用的汉字输入码。它是根据国家标准GB 2312-1980(《信息交换用汉字编码字符集》),将6763个汉字和一些常用的图形符号,分为94个区,每区94个位的方法将它们定位在一张表上,成为区位码表。其中1~9区分布的是一些符号;16~55区为一级字库,共3755个汉字,按音序排列;56~87区为二级字库,共3008个汉字,按部首排列;88~94区为用户定义字库。
区位码表中,每个汉字或符号的区位码由两个字节组成,第一个字节为区码,第二个字节为位码,区码和位码分别用一个两位的十进制数来表示,这样区码和位码合起来就形成了一个区位码。如“啊”字位于16区第01位,则“啊”字的区位码为:区码+位码,即1601。
国家标准GB 2312-1980中的汉字代码除了十进制形式的区位码外,还有一种十六进制形式的编码,称为国标码,国标码是在不同汉字信息系统间进行汉字交换时所使用的编码。需要注意的是,在数值上,区位码和国标码是不同的,国标码是在十进制区位码的基础上,其区码和位码分别加十进制数32。
3.汉字机内码
汉字机内码又称“汉字ASCII码”“机内码”,简称“内码”,由扩充ASCII码组成,指计算机内部存储、处理加工和传输汉字时所用的由0和1符号组成的代码。输入码被接收后就由汉字操作系统的“输入码转换模块”转换为机内码,与所采用的键盘输入法(汉字输入码)无关。
机内码是汉字最基本的编码,不管是什么汉字系统和汉字输入方法,输入的汉字外码到机器内部都要转换成机内码,才能被存储和进行各种处理。我们通常所说的内码是指国标内码,即GB内码。GB内码用两个字节来表示(即一个汉字要用两个字节来表示),每个字节的高位为1,以确保ASCII码的西文与双字节表示的汉字之间的区别。
机内码与区位码的转换过程是:将十进制区位码的区码和位码部分首先分别转换成十六进制,再在其区码和位码部分分别加上十六进制数A0构成,如图1-3所示。
图1-3 区位码与GB内码转换关系
内码的形式也有多种,除GB内码外,还有如GBK、BIG5、UNICIDE等等。无论采用何种外码输入,计算机均将其转换成内码形式加以存储、处理和传送。
4.汉字字模和汉字字库
(1)字形存储码
也称汉字字形码,是指存放在字库中的汉字字形点阵码。点阵的点数越多时一个字的表达质量也越高,也就越美观。不同的字体有不同的字库,如黑体、仿宋体、楷体等是不同的字体,一般用于显示的字形码是16×16点阵的,每个汉字在字库中占16×16/8=32个字节;一般用于打印的是24×24点阵字型,每个汉字占24×24/8=72个字节;一个48×48点阵字型,每个汉字占48×48/8=288个字节。
只有在中文操作系统环境下才能处理汉字,操作系统中有实现各种汉字代码间转换的模块,在不同场合下调用不同的转换模块工作。汉字以某种输入方案输入时,就由与该方案对应的输入转换模块将其转换为机内码存储起来。汉字运算是一种字符串运算,用机内码进行,从主存到外存的传送也使用机内码。在不同汉字系统间传输时,先要把机内码转换为传输码,然后通过接口送出,对方收到后再转换为它自己的机内码。输出时先把机内码转换为地址码,再根据地址在字库中找到字形存储码,然后根据输出设备的型号、特性及输出字形特性使用相应转换模块把字形存储转换为字型输出码,把这个码送至输出设备输出。
(2)汉字字库
一个汉字的点阵字形信息称为该字的字形。字形又称字模(沿用铅字印刷中的名词),两者在概念上没有严格的区分,常混为一谈。存放在存储器中的常用汉字和符号的字模的集合就是汉字字形库,又称汉字字模库,或称汉字点阵字库,简称汉字库。
(3)汉字字库容量的大小
字库容量的大小取决于字模点阵的大小(见表1-3)。
表1-3 常用的汉字点阵字库情况
16×16点阵汉字虽然品质较低,但字库小可放在计算机内存中,用于显示和要求不高的打印输出。24×24点阵汉字字型较美观,多为宋体字,字库容量较大,在要求较高时使用,例如在高分辨率的显示器上用作显示字模,可满足事务处理的打印,也可用于一般报刊、书籍的印刷。32×32点阵汉字,可更好地体现字型风格,表现笔锋,字库更大,在使用激光打印机的印刷排版系统上采用。64×64以上的点阵字(最高可达720×720),属于精密型汉字,表现力更强,字体更多,但字库十分庞大,所以只有在要求很高的书刊、报纸及广告等的出版工作中才使用。实际使用的字库文件,16×16点阵的CCLIB文件大小为237632B,24×24点阵的CLIB24文件大小为607KB。
汉字库可分为软字库和硬字库两种,一般用户多使用软字库。
5.汉字处理流程
汉字通过输入设备将外码送入计算机,再由汉字系统将其转换成内码存储、传送和处理,当需要输出时再由汉字系统调用字库中汉字的字形码得到结果,这个过程参见图1-4。
图1-4 汉字处理流程