2.3.3 字符的输入和输出
1.汉字的输入码
对于像英文这样的小字符集语言而言,字符的输入不是一个特别困难的问题,可以直接通过键盘进行。英文中常用的字母、数字以及符号在键盘上都有按键与之对应,输入时只需直接按键即可输入。但对于汉字这样的大字符集语言而言,字符的输入就不会这样简单。汉字的输入问题曾经是计算机在我国普及的一个“瓶颈”。最初采用的是汉字大键盘输入方法,即特制一种大键盘,键盘上有上千个按键,每个按键对应一个汉字,按住一个按键可以输入一个汉字。这种大键盘输入方法使用起来极为不便,输入效率极低,已被淘汰。
目前采用的汉字输入方案通常是一种键盘编码方案,即利用通用的标准键盘对汉字进行编码输入。在键盘编码输入法中,通常用一个规定好的按键组合来代表一个汉字,通过输入规定的按键组合就可以输入某个汉字。这种按键的组合就称做汉字输入码。为了便于输入,汉字输入码必须设计得容易学习和记忆,因为在输入汉字时,用户必须很快将该汉字转换成输入码,然后经由键盘输入。
汉字输入码只是提供了一种汉字输入途径;需要注意的是,汉字在计算机内部必须表示为相应的机内编码,例如GB2312, GBK等。因此,汉字输入的过程也就是把汉字输入码转换为汉字机内编码的过程。通常计算机中都保存着一张汉字输入码与机内码的对照表。当用户输入输入码后,计算机会根据该表将输入码转换成汉字机内码,完成汉字的输入过程。
理想的情况下,每个汉字应该拥有一个唯一的输入码;但是为了使得汉字输入码易学、易用,通常很难做到每个汉字拥有一个唯一的输入码。在这种情况下,会出现两个乃至多个汉字拥有相同的输入码的问题,此时称为发生了重码。在输入汉字时,如果有重码,计算机不能自动确定用户所输入的到底是哪一个汉字,通常需要用户进行选择,在多个拥有相同输入码的汉字中选出自己所需要的。由于这种选择会降低汉字的输入效率,所以设计汉字输入码时,必须在保证易学、易用的前提下,尽量降低重码的可能性。
目前,汉字输入码五花八门,不下百种,各种设计方案原理不同,各有千秋。但概括而言,这些输入码基本都可归入以下两类:
(1)拼音码。
拼音码是以汉字发音为基础的一种汉字输入码;多是把汉字的拼音作为汉字的输入码,如把“ji”作为“计”字的输入码,用户通过输入“ji”就可以输入汉字“计”。拼音码的最大优点是简单易学,只要学过汉语拼音的人都会很快掌握;缺陷之处在于同音字太多,从而导致大量重码。拼音码一直是使用最为广泛的输入码,典型的包括智能ABC、全拼、双拼、微软拼音等。
(2)拼形码。
拼形码是根据汉字字形设计出来的汉字输入码;将构成汉字的偏旁部首或笔画与键盘上的按键对应起来。用户在输入汉字时,首先将汉字拆分成基本的偏旁部首或笔画,再经由键盘上的相应按键输入。同拼音码相比,拼形码的重码率低,由于输入时无需在重码汉字中进行选择,从而容易达到较高的输入速度。专业打字员常使用拼形码进行汉字输入,但拼形码的缺点是学习代价较大,记忆较为困难。目前使用最为广泛的拼形码是五笔字型输入法。以“常”字为例,其输入码是IPKH,分别对应字根“”、“冖”、“口”和“丨”。
2.字符的输出
英文字符在计算机内表示为ASCII码,汉字在计算机中表示成GB2312码或其他汉字机内编码;但在显示器等输出设备上看到的并非这些编码,而是我们期望看到的字母或汉字。计算机是怎样做到这一点呢?为了在输出设备上输出正确的英文字符或汉字,必须为计算机配备字形知识,即计算机必须知道每个汉字或英文字符的字形,并在需要的时候将某个字的字形送到输出设备进行输出。同样,每个字形也必须表示为二进制代码,存储在计算机的字形库中。这些二进制代码有时也称做字形码。
在计算机中描述字的字形,通常有以下两种办法:
(1)点阵字形描述法。
点阵表示法是描述字符或汉字字形的最基本的方法。在计算机中,ASCII码的输出一般采用5×7或7×9的点阵来表示。汉字字形要远远比ASCII字符复杂,一般要用16×16或24×24的点阵。
图2-10 “啊”字的16×16点阵字形
所谓点阵字形,就是将字形描述为一个点的矩阵。点有黑、白两色,凡是字符笔画经过的地方,点是黑色的;而字符笔画没有经过的地方,点是白色的。图2-10是汉字“啊”的16×16的点阵字形描述。在图2-10中,点阵共有16行,每行有16个点,因此共有256个点,有些点是黑色的,有些点是白色的,其中黑点相连形成了“啊”的字形。为了在计算机中存储字形,上述点阵信息还必须转换为二进制形式存储。通常把白色的点用二进制位“0”来表示;黑色的点用二进制位“1”来表示,这样一个16×16的点阵就可以转换成一个由“0”和“1”组成的16×16的矩阵。对于“啊”字,第一行的点转换为二进制后即为0000000000000100,可以表示为两个字节,第二行的点转换成二进制后是0100111101111110,也可以用两个字节来表示,依次类推,一个16×16点阵的字形转换成二进制后,会得到一个由32个字节的二进制数组成的字形码。为了能够输出所有的汉字或英文字符,必须为每个汉字或英文字符设计点阵字形,并转变成二进制字形码存储在计算机中,供在显示器或打印机上输出时使用。
对于点阵字形技术而言,为了使字形更加美观,常常需要更多的点阵来设计字形。除16×16的点阵外,计算机中还经常使用24×24,48×48的点阵字形。点阵精度的提高意味着存储空间的增加,一个16×16的点阵字形需要32个字节的存储空间;24×24的点阵字形需要72个字节的存储空间;48×48的点阵字形需要288个字节的存储空间。由于汉字数量很多,存储字形需要很多的存储空间。
点阵字体的主要缺点是在字号放大时,常会出现锯齿状失真,字体变得不太美观。而矢量字形技术可以有效地避免这个问题。
(2)矢量字形描述法。
矢量字形正是为改进点阵字形描述法中的锯齿状轮廓而产生的。矢量字形不采用点阵的办法来描述;其核心是用多条直线或曲线描述字形的轮廓,并通过对封闭区域进行填充处理的方式来描述汉字或英文字符的字形;换句话说,通过一连串被称为矢量的直线或曲线绘制出笔画的轮廓。只要这些有序的矢量折线与文字的笔画轮廓曲线足够近似,描述出的字形就会很美观。由于笔画优美且能任意缩放,矢量字形描述技术在目前的计算机上得到了越来越广泛的应用。
图2-11 “啊”字的矢量字形示意图
图2-11是矢量字形原理的示意图。从图中可以看出,在矢量字形中,“啊”字的轮廓是通过若干折线首尾相接刻画出来的。矢量字形在存入计算机时,只需要存储这些矢量折线,不像点阵字体中要存储每个点的信息。目前计算机中常用的TrueType字形技术、Post-Script字形技术都是矢量字形描述技术。
通过上文的介绍,我们知道,汉字在机器中存储以及处理时使用的是GB2312码等机内编码,输入时使用的是形形色色的输入码,而在显示器或打印机上输出时要使用每个字的字形码。我们以“常”字为例来说明这几种码之间的关系:用户在键盘上输入“常”字的输入码IPKH(五笔字型码);计算机通过检索输入码和机内码的对照表,将输入码转变为相应的机内码B3A3(GB2312码)进行存储和处理;在需要输出时,再检索机内码和字形码的对照表,根据字形码将“常”字输出在显示器或打印纸上。
除文字和数值信息外,现代计算机还可以处理各种图像、影视、声音等信息,这些信息也必须以一定的方式转换成二进制信息存储在计算机中并进行处理。关于这些信息的表示、存储和处理,我们将在和多媒体信息有关的后续章节中进行介绍。