1
新编大学计算机基础
1.3.5.3 1.5.3 计算机中的信息编码

1.5.3 计算机中的信息编码

在计算机内,全部是二进制的数码流,对非数值的文字和其他符号进行处理时,就要对其进行数字化处理,即用二进制编码来表示文字和符号。如果各种机型和各种软件系统中没有统一的编码方式,则难以相互兼容,信息的交换会受到很大的制约。因此,字符编码常常都是以国家标准或国际标准的形式颁布施行。

(1)ASCII编码

ASCII(American Standard Code for Information Interchange)编码是在计算机系统中使用得最广泛的信息编码。它本为美国信息交换标准代码,现在已被国际标准化组织ISO认定为国际标准。

ASCII码有7位版本和8位版本两种。7位ASCII版是全世界最通用的版本。它用7个二进制位来进行信息编码。共有128(27)个编码表示了128个字符元素。其中通用控制字符34个,阿拉伯数字10个,大、小写英文字母52个,各种标点符号和运算符号32个。

由于计算机内存中都以字节为管理的基本单位,7位ASCII编码虽然只有7位,但在计算机内仍然占用了8位,该字符编码的第八位(最高位)自动为0。表1.5.3列出了7位ASCII字符编码。

表1.5.3 ASCII字符编码

img30

表中有34个控制符,注释如下:

NUL(空白) SOH(标题开始) STX(正文开始) ETX正文结束 E0T(送毕) ENQ(询问) ACK(应答 ) BEL(告警) BS(退格) HT(横表) LF(换行) VT(纵向列表) FF(换页) CR(回车)S0(移出) SI(移入) DLE(转义) DC1 (设备控制1) DC2(设备控制2) DC3(设备控制3) DC4(设备控制4) NAK(否认) SYN(同步) ETB(信息组传送结束) CAN(作废) EM(纸毕) SUB(减) ESC(换码) FS(文字分隔符) GS(组分隔符) RS(记录分隔符) US(单元分隔符) SP(空格) DEL(删除)

8位ASCII编码版本表示为ASCII-8。它使用8位二进制数进行编码。当最高位为0时,称为基本ASCII码(编码与7位ASCII码相同);当最高位为1时,形成扩充的ASCII码。通常各个国家都把扩充的ASCII码作为自己国家语言文字的代码。

(2)汉字编码

汉字由于是象形文字,字的数目多达6万余个,常用汉字就有3000~5000个,加上汉字的形状和笔画多少差异极大。因此,不可能用少数几个确定的符号将汉字完全表示出来,汉字的处理曾是一个难题。有人提议过汉字走拼音化道路,以解决计算机汉字处理的诸多困难,但难以推广。20世纪80年代,我国一批计算机和汉字学专家做了大量工作,汉字的计算机处理技术得到了飞跃发展,目前,汉字处理的速度已超过英文。

计算机汉字处理是以中国国家标准局所颁布的一些常见汉字编码为基础,计算机软硬件开发商根据该标准开发汉字的输入方法程序、计算机内汉字的表示、处理方法程序,汉字的输出显示程序等。汉字的编码涉及汉字的交换码、机内码、外码和输出码。

1)《信息交换用汉字编码字符集·基本集》

《信息交换用汉字编码字符集·基本集》是我国于1980年制定的国家标准,标准代号GB2312-80。它是国家规定用于汉字信息处理所用代码的依据。GB2312-80中规定了信息交换用的6763个汉字和682个非汉字图形符号(包括几种外文字母、数字和符号)的代码。6763个汉字又按其使用频度、组词能力以及用途大小分成一级常用汉字3755个和二级常用汉字3008个。一级汉字按拼音字母顺序排列;若遇同音字,则按起笔的笔形顺序排列;若起笔相同,则按第二笔的笔形顺序排列,以此类推。二级汉字按部首顺序排列。

汉字分为两个字库,是为了解决当时计算机系统内存小的技术限制。但也留下了一些问题,例如汉字的排序等。

对于GB2312-80未编码的汉字,计算机系统可以通过造字来显示和打印,但不能进行排序,也不能在不同计算机系统之间开展信息交换。

GB2312-80标准对汉字进行编码是用两个字节来表示一个汉字或图形符号。每个字节只用低7位。在进入计算机后,第八位固定为1。由于低7位中有34种状态是用于控制字符,因此,只有94(128-34=94)种状态可用于汉字编码。这样,双字节的低7位只能表示94×94=8836种状态。

在GB2312-80标准中,汉字被排列成94行、94列。其行号称为区号,列号称为位号,其实就是在双字节中,用高字节表示区号,低字节表示位号。非汉字图形符号置于第1~11区,一级汉字3755个置于第16~55区,二级汉字3008个置于第56~87区。

为避开控制符,汉字的二进制编码从(100000)2(即十进制的32)开始。因此,要把区位码转换为二进制或十六进制的国标码,只需要分别在区号和位号上加上十进制数的数32。例:汉字“啊”的区位码为1601,则它的二进制编码的高位字节编码为(16)10+(32)10=(48)10=(110000)2=(30)16,它的低位为(01)10+(32)10=(33)10=(100001)2=(21)16。故汉字“啊”的国标码(用十六进制表示)为3021。

2)汉字的机内码

汉字的机内码是供计算机系统内部进行汉字的存储、加工处理、传输统一使用的代码,又称为汉字内部码或汉字内码。不同的系统使用的汉字机内码有可能不同。目前使用最广泛的一种为两个字节的机内码,是变形的国标码。这种格式的机内码是将国标GB2312-80交换码的两个字节的最高位分别置为1而得到的。其最大优点是机内码表示简单,且与交换码之间有明显对应关系,同时也解决了中西文机内码存在二义性的问题。例:汉字“啊”的机内码二进制编码为1011000010100001。十六进制编码为B0A1。

3)汉字的输入码(外码)

汉字输入码是为了将汉字通过键盘输入计算机而设计的代码。汉字输入码一般有数码输入法(如区位码)、拼音类输入法(如智能全拼输入码、智能双拼等)、拼形类输入法(如五笔字型输入法)和音形结合类输入法(如自然码)等几大类。

4)汉字的字形码

计算机中,屏幕显示汉字用点阵来表示。即将汉字写在同样大小的方块中,每个方框有m行n列,简称点阵。一个m×n列的点阵共有m×n个点。例如16×16点阵的汉字,每个方块有16行,每行有16个点,每个汉字共256个点。例如显示“大”字如图1.5.1所示。

img31

图1.5.1 汉字“大”的点阵图

在计算机中用二进制数来表示汉字的点阵。有点处用1表示,无点处用0表示。这就是汉字的字形(字模)码,或称为汉字的输出码。

对m×n点阵的汉字,每个汉字需要B个字节来表示,则

B=m×n÷8

如:一个16×16的点阵需要16×16=256个点来表示,一个点占一个二进制位,则为256÷8=32个字节。

对一个汉字而言,行列数越多,描绘的汉字越精细,字体就越漂亮。但占用的存储空间也越多。现在常用的汉字字形点阵有16×16点阵、24×24点阵、32×32点阵等。

对某一种点阵,某一种字体汉字的数值化编码集合为汉字字库。如16×16点阵宋体字库,24×24点阵的黑体字库等。

5)汉字的其他编码

ISO10646汉字编码方案。国际标准化组织10646号标准为UCS(Universal Character Set)编码,它是世界通用的一种汉字编码方案。有人称它为“大字符集”或通用多八位编码字符集。该方案采用4个字节的编码来表示一个汉字,可容纳20亿个汉字。在编码中,将中文、日文、朝鲜文的汉字统一编码。该方案虽然得到了中、日、韩政府的同意,但因制造成本和技术的原因未得到计算机行业的热烈支持。

Unicode 编码。由几家计算机研究和制造公司提出的汉字编码方案。它得到了Microsoft、Sun、Next、Novell和Adobe公司的支持。该方案采用16位编码方案来进行汉字编码。它建立了通用汉字子集,把中、日、朝文字中的常用汉字统一起来编码。该方案在互连网上得到了广泛的应用。GB 13000.1-93“信息技术通用多八位编码字符集”等同于Unicode 1.1版本。

BIG5编码。是目前中国台湾、香港地区普遍使用的一种繁体汉字的编码标准,包括440个符号,一级汉字5401个、二级汉字7652个,共计13 060个汉字。

GB12345-90《信息交换用汉字编码字符集第一辅助集》。它是汉字繁体字的编码标准。该标准共收录6866个汉字,纯繁体的字大概有2200余个。

GBK码。全国信息技术化技术委员会于1995年12月1日发布《汉字内码扩展规范》。共收入21 886个汉字和图形符号,GBK向下与GB2312 完全兼容,向上支持 ISO-10646 国际标准,在前者向后者过渡过程中起到了承上启下的作用。简体Windows 95/98/200/XP都使用GBK码

GB 18030-2000《信息交换用汉字编码字符集基本集的扩充》。与GB 2312-80、GBK兼容,包含所有GB 13000-93及Unicode 3.1字符。它采用多位元编码,每个字可以由1个、2个或4个位元组组成,编码空间庞大,最多可定义160万个字元,还支持中国国內少数民族的文字。但目前还未进入商用。