3.3.2 中文信息的编码与表示
汉字也是字符,是中文的基本组成单位。GB 2312—1980《信息交换用汉字编码字符集基本集》是常用的汉字编码标准,它收录了6763个常用汉字。根据这些汉字使用频率的高低,又将它们分成两部分,一部分称为一级汉字共3755个,即最常用的汉字;另一部分称为二级汉字共3008个,为次常用的汉字。GB 2312—1980还收录了一些数字符号、图形符号、外文字母等。
汉字与西方文字不同。西方文字是拼音文字,仅用为数不多的字母和其他符号即可拼组成大量的单词、句子,这与计算机可以接受的信息形态和特点基本一致,所以处理起来比较容易。例如,对英文字符的处理,7位ASCII码字符集中的字符即可满足使用需求,且英文字符在计算机上的输入及输出也非常简单。因此,英文字符的输入、存储、内部处理和输出都可以只用同一个编码(如ASCII码)。而汉字是一种象形文字,字数极多(现代汉字中仅常用字就有六七千个,总字数高达5万个以上),字形复杂,且每一个汉字都有“音、形、义”三要素,同音字、异体字也很多,这些都给汉字的计算机处理带来了很大的困难。要在计算机中处理汉字,必须解决以下几个问题:首先是汉字的输入,即如何把结构复杂的方块汉字输入计算机中,这是汉字处理的关键;其次,汉字在计算机内如何表示和存储,如何与西文兼容。最后,如何将汉字的处理结果从计算机内输出。
为此,必须将汉字代码化,即对汉字进行编码。对应于上述汉字处理过程中的输入、内部处理及输出这3个主要环节,每一个汉字的编码都包括输入码、交换码、机内码和字形码。在计算机的汉字信息处理系统中,处理汉字时要进行如下的代码转换:输入码→交换码→机内码→字形码。以上简述了对汉字进行计算机处理的基本思想和过程,下面具体介绍汉字的4种编码。
1.输入码
为了利用计算机上现有的标准西文键盘来输入汉字,必须为汉字设计输入编码。输入码又称外码。目前,已申请专利的汉字输入编码方案有六七百种之多,而且还不断有新的输入方法问世,以至于有“万‘码’奔腾”之喻。按照设计思想的不同,可把数量众多的输入码归纳为四大类:数字编码、拼音码、字形码和音形码。目前应用最广泛的是拼音码和字形码。
①数字编码:数字编码是用等长的数字串为汉字逐一编号,以这个编号作为汉字的输入码。例如,区位码、电报码等都属于数字编码。此种编码的编码规则简单,易于和汉字的内部码转换,但难于记忆,仅适用于某些特定部门。
②拼音码:拼音码是以汉字的读音为基础的输入方法。拼音码使用方法简单,一学就会,易于推广,缺点是重码率较高(因为汉字同音字多),在输入时要进行屏幕选字,影响输入速度。拼音码是按照汉语拼音编码输入的,因此在输入汉字时,要求读音标准,不能使用方言。拼音码特别适合于对输入速度要求不太高的非专业录入人员使用。
③字形码:字形码是以汉字的字形结构为基础的输入编码。在微型机上广为使用的五笔字型码(王码)是字形码的典型代表。五笔字型码的主要特点为输入速度快,但这种输入方法因为要记忆字根、练习拆字,所以前期学习花费的时间较多。此外,有极少数的汉字拆分困难,给出的编码与汉字的书写习惯不一致。
④音形码:音形码是兼顾汉字的读音和字形的输入编码。目前使用较多的音形码是自然码。
2.交换码
交换码用于汉字外码和内部码的交换。我国于1981年颁布的(GB 2312—1980)《信息交换用汉字编码字符集基本集》是交换码的国家标准,所以交换码又称国标码。国标码是双字节代码,即每两个字节为一个汉字编码。每个字节的最高位为0。国标GB 2312—1980收入常用汉字6763个,其他字母及图形符号682个,总计7445个字符。将这7445个字符按94行×94列排列在一起,组成GB 2312—1980字符集编码表,表中的每一个汉字都对应于唯一的行号(称为区号)和列号(称为位号),根据区位号确定汉字的国标码值,分别用两个字节存储。
由于篇幅所限,本书未列出GB 2312—1980字符编码表,可参看相关书籍。
3.机内码
机内码是汉字在计算机内的基本表示形式,是计算机对汉字进行识别、存储、处理和传输所用的编码。内部码也是双字节编码,将国标码两个字节的最高位都置为1,即转换成汉字的内部码。计算机信息处理系统就是根据字符编码的最高位是1还是0来区分汉字字符和ASCII码字符。
4.字形码
字形码是表示汉字字形信息(汉字的结构、形状、笔画等)的编码,用来实现计算机对汉字的输出(显示或打印)。由于汉字是方块字,因此,字形码最常用的表示方式是点阵形式,有16×16点阵、24×24点阵、48×48点阵等。例如,16×16点阵的含义为:用256(16×16=256)个点来表示一个汉字的字形信息。每个点有“亮”或“灭”两种状态,用一个二进制的1或0来对应表示。因此,存储一个16×16点阵的汉字需要256个二进制位,共32字节。
以上的点阵可根据汉字输出的不同需要进行选择,点阵的点数越多,输出的汉字就越精确、美观。
汉字的字形点阵要占用大量的存储空间,通常将其以字库的形式存储在机器的外存中,需要时才检索字库,输出相应汉字的字形。为避免占用大量宝贵的内存空间,同时又能提高汉字的处理速度,可将字库中的二级汉字存储在外存中,而将一级汉字存储在内存中。
GB 2312—1980规定了用连续的两个字节来表示一个汉字,并且只用各个字节的低7位,最高位未定义,这样一来就有可能与ASCII码字符产生冲突。就单个字节来说,两种编码方式都只用到字节的低7位,ASCII码规定高位置为0,而国标码对高位未定义。因此,对单个字节而言,不能确定它到底是一个ASCII码字符还是一个汉字的一部分(低字节或高字节)。于是有很多解决这类问题的方案应运而生,变形国标码就是其中之一,并得到了广泛的应用。它的主要特点是将国标码编码的各个字节的最高位置为1,以达到区别于ASCII编码的目的。
由于计算机中各种信息都以二进制的形式存在,有的是数值,有的是ASCII码字符,有的是汉字,如何区分它们取决于(或者程序)按照何种规则判读它们。例如,对于机器内存中连续两个字节,它们的低7位内容分别为0110000和0100001,如果它们的最高位均为1,则表示汉字“啊”;如果均为0,则表示为两个ASCII码字符0和1。另外,还可以根据不同的编码规则将它们判读成不同的字符,这里不再详细叙述。