计算机中数据的概念是广义的,计算机除了处理各种数之外,还要处理大量符号,如英文字母、汉字等非数值的信息。例如,当要用计算机编写文章时,就需要将文章中的各种符号、英文字母、汉字等输入计算机,然后由计算机进行编辑排版。因此,计算机要对各种文字进行处理。

通常,计算机中的数据可以分为数值型数据与非数值型数据。其中数值型数据就是常说的“数”(如整数、实数等),它们在计算机中是以二进制形式存放的,这部分内容在1.1.2节中已做了讲解。而非数值型数据与一般的“数”不同,通常不表示数值的大小,而只表示字符或图形等信息,但这些信息在计算机中也是以二进制形式来表示的。本节具体讲解字符数据在计算机中的表示方法。

字符的编码

目前,国际上通用的且使用最广泛的字符有十进制数字符号0~9,大小写的英文字母,各种运算符、标点符号等,这些字符的个数不超过128个。为了便于计算机识别与处理,这些字符在计算机中是用二进制形式来表示的,通常称为字符的二进制编码。

由于需要编码的字符不超过128个,因此,用7位二进制数就可以对这些字符进行编码。但为了方便,字符的二进制编码一般占8个二进制位,它正好占计算机存储器的一个字节。

目前国际上通用的是美国国家信息交换标准代码(American Standard Code for Information Interchange),简称为ASCII码(取英文单词的第一个字母的组合)。

用ASCII表示的字符称为ASCII码字符,表1-4是ASCII码编码表。

字符数据在计算机中的表示方法-数据恢复迷

ASCII码编码表

ASCII码规定每个字符用7位二进制编码表示,表1-4中第一行是第6、5、4位的二进制编码值,第一列是第3、2、1、0位的十进制编码值,第一行、第一列的交点则是指定的字符。7位二进制可以给出128个编码,表示128个常用的字符。其中95个编码,对应着计算机终端能输入并且可以显示的95个字符,打印机设备也能打印这95个字符,如大小写各26个英文字母,0~9这10个数字符,通用的运算符和标点符号=、+、−、*、/、<、>、,、:、·、?、。、(、)、{、}等。

例如要知道字母“A”的ASCII码,查表得知字母A在第2行第5列的位置。行指示了ASCII码第3、2、1、0位的状态,列指示第6、5、4位的状态,因此字母A的ASCII码是1000001B=41H。

汉字的编码

为了适应中文信息处理的需要,1981年国家标准局公布了GB2312—80《信息交换用汉字编码字符集——基本集》,收集了常用汉字67 763个,并给这些汉字分配了代码。

用计算机进行汉字信息处理,首先必须将汉字代码化,即对汉字进行编码,称为汉字输入码。汉字输入码送入计算机后还必须转换成汉字内部码,才能进行信息处理。处理完毕之后,再把汉字内部码转换成汉字字形码,才能在显示器或打印机输出。因此汉字的编码有输入码、内码、字形码三种。

汉字的输入码

目前,计算机一般是使用西文标准键盘输入的。为了能直接使用西文标准键盘输入汉字,必须给汉字设计相应的输入编码方法。其编码方案有很多种,主要的分为三类:数字编码、拼音码和字形编码。

①数字编码。常用的数字编码是国标区位码,规定全部国标汉字及符号组成94×94的矩阵。在这矩阵中,每一行称为一个“区”,每一列称为一个“位”。这样,就组成了94个区(01~94区),每个区内有94个位(01~94)的汉字字符集。区码和位码简单地组合在一起(即两位区码居高位,两位位码居低位)就形成了“区位码”。区位码可唯一确定某一个汉字或汉字符号;反之,一个汉字或汉字符号都对应唯一的区位码。例如,汉字“玻”的区位码为“1803”(即在18区的第3位)。

所有汉字及符号的94个区划分成如下四个组:

  • 1~15区为图形符号区,其中,1~9区为标准区,10~15区为自定义符号区。
  • 16~55区为一级常用汉字区,共有3755个汉字,该区的汉字按拼音排序。
  • 56~87区为二级非常用汉字区,共有3008个汉字,该区的汉字按部首排序。
  • 88~94区为用户自定义汉字区。

数字编码输入的优点是无重码,输入码与内部编码的转换比较方便;缺点是代码难以记忆。

②拼音码。拼音码是以汉语拼音为基础的输入方法。凡掌握汉语拼音的人,不需训练和记忆,即可使用,但汉字同音字太多,输入重码率很高,因此按拼音输入后还必须进行同音字选择,影响了输入速度。

③字形编码。字形编码是用汉字的形状来进行的编码。汉字总数虽多,但是由一笔一画组成,全部汉字的部件和各行其实是有限的。因此,把汉字的笔画部件用字母或数字进行编码,按笔画的顺序依次输入,就能表示一个汉字了。五笔字型编码就是最有影响的一种字形编码方法。

汉字的内码

同一个汉字以不同输入方式进入计算机时,编码长度及0、1组合顺序差别很大,使汉字信息进一步存取、使用、交流十分不方便,必须转换成长度一致、且与汉字唯一对应的能在各种计算机系统内通用的编码,满足这种规则的编码叫汉字内码。

汉字内码是用于汉字信息的存储、交换检索等操作的机内代码,一般采用两个字节表示。英文字符的机内代码是7位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能够区别,汉字机内代码中两个字节的最高位均规定为“1”。

有些系统中字节的最高位用于奇偶校验位或采用扩展ASCII码,这种情况下用三个字节表示汉字内码。

汉字的字形码

存储中计算机内的汉字需要在屏幕上显示或在打印机上输出时,需要知道汉字的字形信息。汉字内码并不能直接反映汉字的字形,而要采用专门的字形码。

目前的汉字处理系统中,字形信息的表示大体上有两类形式:一类是用活字或文字版的母体字形形式;另一类是点阵表示法、矢量表示法等形式,其中最基本的,也是大多数字形库采用的是以点阵的形式存储汉字字形编码的方法。

点阵字形是将字符的字形分解成若干“点”组成的点阵,将此点阵置于网格上,每一小方格是点阵中的一个“点”,点阵中的每一个点可以有黑白两种颜色,有字形笔画的点用黑色;反之用白色,这样就能描写出汉字字形了。

图1-1是汉字“次”的点阵,如果用十进制的“1”表示黑色点,用“0”表示没有笔画的白色点,每一行16个点用两字节表示,则需32字节描述一个汉字的字形,即一个字形码占32字节。

字符数据在计算机中的表示方法-数据恢复迷

图1-1 汉字“次”的点阵

一个计算机汉字处理系统常配有宋体、仿宋、黑体、楷体等多种字体。同一个汉字不同字体的字形编码是不相同的。

根据汉字输出的要求不同,点阵的多少也不同。简易型汉字为16×16点阵,提高型汉字为24×24点阵、32×32点阵,甚至更高。点阵越大,描述的字形越细致美观,质量越高,所占存储空间也越大。汉字点阵的信息量是很大的,以16×16点阵为例,每个汉字要占用32个字节,国标两级汉字要占用256KB。因此字模点阵只能用来构成汉字库,而不能用于机内存储。

通常,计算机中所有汉字的字形码集合起来组成汉字库(或称为字模库)存放在计算机里,当汉字输出时由专门的字形检索程序根据这个汉字的内码从汉字库里检索出对应的字形码,由字形码再控制输出设备输出汉字。汉字点阵字形的汉字库结构简单,但是当需要对汉字进行放大、缩小、平移、倾斜、旋转、投影等变换时,汉字的字形效果不好。若使用矢量汉字库、曲线字库的汉字,其字形用直线或曲线表示,能产生高质量的输出字形。

综上所述,汉字从送入计算机到输出显示,汉字信息编码形式不尽相同。汉字的输入编码、汉字内码、字形码是计算机中用于输入、内部处理、输出三种不同用途的编码,不要混为一谈。