Kaito's Blog

致力成为一枚silver bullet.

0%

计算机系统基础(六)字符的表示

之前的文章讲完了数字在计算机内部的表示方式,那英文、中文字符在计算机内部是如何表示的呢?这篇文章我们来看字符的表示方式。

西文字符

西文字符主要由拉丁字母、数字、标点符号及一些特殊符号组成,它们统称为字符,所有字符的集合叫做字符集

但字符不能直接在计算机内部处理,必须对字符进行数字化编码,转换成二进制0/1序列,因此构成了字符和数字化编码对应的代码表,简称码表,码表中的字符与代码一一对应。

世界各国都有自己的语言,即各国都有自己的字符,每个国家的字符组合起来也就产生了多种字符集。

由于计算机是美国人发明的,所以对于英文字符,美国人制定了一个字符和二进制对应的码表,这个码表就是ASCII码,即美国标准信息交换码(American Standard Code for Information Interchange)。

ASCII字符编码具体对应关系如下:

ASCII字符编码

ASCII码用1个字节8位表示一个字符,但只使用了后7位就可以表示英文字符、标点符号、控制字符,所以默认最高位是0。

ASCII码能表示128个不同的字符,其中包括10个数字、26个小写字母、26个大写字母、算术运算符、标点符号、商业符号等可打印显示的字符。另外还包括33个控制字符,在传输打印或显示时起控制作用。

ASCII字符编码有2个规律:

  • 字符0-9去掉高3位时,低4位正好是这10个数字的8421码,既满足排序关系,又利于ASCII码到十进制数的转换
  • 英文字符也满足字母排序关系,且大、小写字母的编码差别在于第6位,若这一位是0,则是大写字母,若为1,则是小写字母,使得大、小写字母转换非常方便

汉字字符

了解完英文字符,再来看下汉字字符在计算机内部是如何表示的。

随着计算机的发展,计算机在中国也逐渐流行起来,那汉字字符也需要经过编码,才能在计算机内部表示。

但汉字字符与英文字符不同,英文字符很少,使用8个二进制位即可表示。汉字一个字就是一个方块图形,且汉字总数超过6万个,数量巨大,汉字的传输转换、输入输出都是问题。

计算机要处理汉字,要经过3个过程,即如何把汉字输入到计算机、计算机内部如何存储、计算机如何显示出汉字图形,简单来说就是输入编码、计算机内部编码、汉字图形输出

输入编码

英文字符输入非常简单,我们平时使用的键盘,每一个键都代表着一个字符,想要输入什么字符直接按下键盘上的一个按键即可。

但汉字不同,要想输入一个汉字,需要多个按键组合后才能输出,这个组合的过程就是输入编码,叫做输入码,由于此时内容还没有传到计算机内部,所以也称为外码

说白了输入码就是我们常见的各种输入法,例如输入同一个汉字,可以使用拼音输入法,也可以使用五笔输入法。

除了我们常见的输入法之外,其实还有非常多的编码方案,但我们输入汉字的目的要既简单又易用,所以常用的输入编码也就4大类:

  • 数字编码:一串数字表示汉字的编码,例如电报码、区位码等,难记忆,不易推广
  • 字音编码:基于汉语拼音的编码,简单易学,适合非专业人员,缺点是同音字引起的重码多,需要选择操作,例如最常用的微软拼音输入法、智能ABC输入法
  • 字形编码:将汉字自行分解归类制定的编码,重码少、输入速度快,但编码规则不易掌握,五笔输入法就是这类编码
  • 形音编码:将读音和形状结合起来的编码,吸收上面2种编码的优点,但不易掌握

内部编码

通过输入码,就可以把汉字从键盘输入到计算机内部了,到了计算机内部,也需要一种编码在计算机内部存储,这个编码也叫内码

对于西文字符来说,它的内码就是ASCII码,对于汉字来说,先后产生了GB2312、GBK、GB18030编码方案。

之后为了统一全世界的字符,推出了Unicode编码方案,它们之前的联系和区别可参考我之前写的这篇文章:字符集和字符编码:ASCII、GB18030、Unicode、UTF-8

有了这些针对汉字字符的编码方案,汉字字符就可以在计算机内部表示和存储了。

图形输出

汉字经过了键盘输入、计算机内部存储后,要想输出显示在屏幕或打印出来,这时就需要从汉字的内码转换成对应的图形,然后输出到屏幕上。

每个汉字都是什么样的图形?如何根据内码找到对应的汉字图形?

这就需要我们的每一个汉字的字形都必须预先存放在计算机内,一套字符集对应着一套字库,且不同的字体,如宋体、黑体、楷体都对应着不同的字库。在输出一个汉字时,计算机要先找到字库对应的图形信息,然后把图形信息送到相应的设备输出。

汉字的输出方式分为2种:字模点阵描述和轮廓描述。

字模点阵描述是将字库中的各个汉字,由0和1组成的方阵画出来,有黑点的地方用1表示,空白处用0表示。

轮廓描述比较复杂,它把汉字笔画的轮廓用一组直线或曲线勾画出来,记下每一条直线和曲线的数学描述公式,这种方式精度更高,字型大小可以任意变化。

总结

对于字符的表示总结如下:

  • 西文字符主要用ASCII码表示
  • 汉字字符处理需要经过输入编码、计算机内部编码、图形输出3个阶段
  • 这3个阶段分别对应的是输入码、内码、字模点阵码或轮廓描述
  • 汉字字符的计算机内部编码方案有GB2312、GBK、GB18030、Unicode编码方案
如果此文章能给您带来小小的工作效率提升,不妨小额赞助我一下,以鼓励我写出更好的文章!