1.2.4 字符的编码
【了解】不同字符的ASCII的大小。
【应用】比较常用的ASCII。
字符包括西文字符(字母、数字、各种符号)和中文字符,指所有不可做算术运算的数据。由于计算机是以二进制数的形式存储和处理数据的,因此字符也必须按特定的规则进行编码才能被计算机识别。
所谓“编码”,就是用二进制数来表示数据。
1 西文字符的编码
计算机中常用的字符(西文字符)编码标准有两种:EBCDIC和ASCII。IBM系列的大型计算机采用EBCDIC,微型计算机采用ASCII。下面主要介绍ASCII。
ASCII是美国信息交换标准代码(American Standard Code for Information Interchange)的英文缩写。该编码标准被国际标准化组织(International Organization for Standardization,ISO)采纳为国际通用的信息交换标准代码,是目前在微型计算机中普遍使用的字符编码。
ASCII有7位码和8位码两个版本。
大小写英文字母、阿拉伯数字、标点符号、控制符等字符都有对应的编码,表1⁃4中的每个字符都对应一个数值,这个数值称为该字符的ASCII值,排列次序为b 6 b 5 b 4 b 3 b 2 b 1 b 0,其中b 6为最高位,b 0为最低位。
表1⁃4 128个字符对应的7位ASCII值
ASCII表中共有34个非图形字符(又称为控制字符)。例如,回车的符号是CR(Carriage Return),编码是 0001101。其余94个可打印字符也称图形字符,将这些字符按ASCII值从小到大排列为0~9、A~Z、 a~z,其中小写字母比大写字母的ASCII值大32,即位b5为0或1,这有利于大、小写字母之间的编码转换。 有些特殊的字符编码是容易记忆的,例如,“A”字符的编码为1000001,对应的十进制数是65;“B”字符的编码为1000010,对应的十进制数是66。
计算机内部用一个字节(8位二进制数)存放一个7位ASCII,其最高位为0。
2 汉字的编码
【了解】国标码与汉字内码的转换。
为使计算机可以处理汉字,需要对汉字进行编码。GB/T 2312—1980《信息交换用汉字编码字符集—基本集》(简称GB码或者国标码)是我国于1980年发布的汉字编码标准。国标码中的汉字分为94行、94列,代码表分为94个区(行)和94个位(列)。区位码由其中的区号(行号)和位号(列号)构成。4位十进制数字组成区位码,前面2位是区号,后面2位是位号。计算机进行汉字处理的过程实际上是各种汉字编码之间的转换过程。汉字编码有汉字输入码、汉字内码、汉字字形码、汉字地址码等。下面分别介绍各种汉字编码。
(1)汉字输入码。
汉字输入码是为使用户能够使用西文键盘输入汉字而编制的编码,也叫外码。
汉字输入码有许多不同的编码方案,它们大致分为以下几类。
● 音码:以汉语拼音字母和数字为汉字编码,例如全拼输入法和双拼输入法。
● 形码:根据汉字的字形结构对汉字进行编码,例如五笔字型输入法。
● 音形码:以拼音为主,字形、字义为辅,对汉字进行编码,例如自然码输入法。
● 数字码:直接用固定位数的数字给汉字编码,例如区位输入法。
同一个汉字在不同编码方案中的编码一般也不同,例如输入“嵌”字时,使用全拼输入法要输入编码“qian”(然后选字),而用五笔字型输入法要输入编码“mafw” 。
(2)汉字内码。
汉字内码是为在计算机内部对汉字进行处理、存储和传输而编制的编码。不论采用何种输入码,输入的汉字都要先在计算机内部转换为统一的汉字内码,然后才能在计算机内进行传输、处理等。
目前,对应国标码,一个汉字内码也用两个字节存储。因为ASCII是西文的内码,为不使汉字内码与ASCII发生混淆,就把国标码每个字节的最高位1作为汉字内码。
【例1⁃7】汉字“大”的国标码是(3473)16,将国标码加上(8080)16,即可得到它的内码。
(3)汉字字形码。
汉字字形码是存放汉字字形信息的编码,它与汉字内码一一对应。每个汉字的字形码是预先存放在计算机内的,存放的位置常称为汉字库。计算机根据汉字内码在汉字库中查到其字形码,得知字形信息,然后实现汉字的显示或打印输出。
表示汉字字形的方法主要有点阵字形法和轮廓字形法两种。
下面具体介绍点阵字形法。
图1⁃1 汉字“工”的16×16点阵字形
由于汉字是由笔画组成的方块字,所以无论多少笔画的汉字都可以写在相同大小的方框里。如果用m行n列小圆点组成这个方框(称为点阵),那么每一个汉字都可以用点阵中的某些点组成。图1⁃1所示为汉字“工”的16×16点阵字形。
计算机用一组二进制数表示一个点阵。当某一点的二进制数是1时,该点为黑点,是0时为白点。一个16×16的点阵有256个点,需要16×16÷8=32字节的存储空间。同理,24×24点阵的汉字字形码需要24×24÷8=72字节的存储空间,32×32点阵的汉字字形码需要32×32÷8=128字节的存储空间。
显然,点阵中行、列数越多,锯齿越小,字形的质量越好,但存储汉字字形码需要的存储空间也越大。汉字字形通常分为通用型和精密型两类。
● 通用型汉字字形点阵分为简易型16×16点阵、普通型24×24点阵、提高型32×32点阵3种。
● 精密型汉字字形用于常规的印刷排版,字形点阵一般在96×96点阵以上,占用的字节量较大,因此精密型汉字字形通常采用信息压缩存储技术来存储。
(4)汉字地址码。
汉字地址码是指汉字库(这里主要指汉字字形的点阵式字库)中存储汉字字形信息的逻辑地址码。在汉字库中,字形信息都是按一定顺序(大多数按照标准汉字国标码中汉字的排列顺序)连续存放在存储介质中的,所以汉字地址码通常是连续、有序的,而且与汉字内码有着简单的对应关系,从而简化了汉字内码与汉字地址码的转换。
(5)各种汉字编码之间的关系。
汉字的输入、输出和处理的过程,实际上是汉字的各种编码之间的转换过程。
汉字通过汉字输入码输入计算机,然后通过输入字典转换为内码,以内码的形式进行存储和处理。在汉字通信过程中,处理机将汉字内码转换为适用于通信的交换码(汉字信息交换码,也叫国标码),以实现通信。
在汉字的显示和打印输出过程中,处理机根据汉字内码计算出汉字地址码,按汉字地址码从汉字库中取出汉字字形码,最终实现汉字的显示或打印输出。图1⁃2所示为这些编码在汉字信息处理系统中的地位及它们之间的关系。
图1⁃2 各种汉字编码在汉字信息处理系统中的地位及它们之间的关系