1.汉字的输入编码
为了能直接使用西文标准键盘把汉字输入到计算机,就必须为汉字设计相应的输入编码方法。
当前采用的方法主要有以下三类:
数字编码常用的是国标区位码,用数字串代表一个汉字输入。
区位码是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。
区码和位码各两位十进制数字,因此输入一个汉字需按键四次。
数字编码输入的优点是无重码,且输入码与内部编码的转换比较方便,缺点是代码难以记忆。
拼音码拼音码是以汉字拼音为基础的输入方法。
使用简单方便,但汉字同音字太多,输入重码率很高,同音字选择影响了输入速度。
字形编码字形编码是用汉字的形状来进行的编码。
把汉字的笔划部件用字母或数字进行编码,按笔划的顺序依次输入,就能表示一个汉字。
为了加快输入速度,在上述方法基础上,发展了词组输入\联想输入等多种快速输入方法。
但是都利用了键盘进行“手动”输入。
理想的输入方式是利用语音或图象识别技术“自动” 将拼音或文本输入到计算机内,使计算机能认识汉字,听懂汉语,并将其自动转换为机内代码表示。
目前这种理想已经成为现实。
2.汉字内码
汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。
英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。
为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。
注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。
3.汉字字模码
字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。
根据汉字输出的要求不同,点阵的多少也不同。
字模点阵的信息量很大,所占存储空间也很大。
因此字模点阵只能用来构成汉字库,而不能用于机内存储。
字库中存储了每个汉字的点阵代码。
当显示输出或打印输出时才检索字库,输出字模点阵,得到字形。
注意:汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码,不要混为一谈。
汉字在计算机中用两个字节表示,并且最高位为1
英文字符都是一个字节表示,最高位为0
点阵字
点阵字体是把每一个字符都分成16×16或24×24个点,然后用每个点的虚实来表示字符的轮廓。
点阵字体优点是显示速度快,不像矢量字体需要计算;其最大的缺点是不能放大,一旦放大后就会发现文字边缘的锯齿。
点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示。
这种文字显示方式于较早前的电脑系统(例如未有图形接口时的 DOS 操作系统)被普遍采用。
由于位图的缘故,点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下,否则文字只被强行放大而失真字形,产生成马赛克式的锯齿边缘。
但对于字号 8-14px 的尺寸较小的汉字字体(即现今操作系统大多采用的默认字号)现今亦仍然被使用于荧幕显示上,能够提供更高的显示效果;不过现今该种点阵字体主要只作为“辅助”的部分,当使用者设定的字体尺寸并没有拥有位图像时,字体便会以向量图象方式显示;而当打印时,印有字体无论大小亦会使用向量字型打印。
这要先了解点阵字库与矢量字库:
点阵字库常用来作为显示字库使用,这类点阵字库汉字最大的缺点是不能放大,一旦放大后就会发现文字边缘的锯齿。
矢量字库保存的是对每一个汉字的描述信息,比如一个笔划的起始、终止坐标,半径、弧度等等。
在显示、打印这一类字库时,要经过一系列的数学运算才能输出结果,但是这一类字库保存的汉字理论上可以被无限地放大,笔划轮廓仍然能保持圆滑,打印时使用的字库均为此类字库。
Windows使用的字库也为以上两类,在FONTS目录下,如果字体扩展名为FON,表示该文件为点阵字库,扩展名为TTF则表示矢量字库!
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
其中:
0~31及127(共33个)是控制字符或通讯专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退
格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。
它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字;
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。
所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。
奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。
扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号 .
国家标准汉字字符集GB2312-80共收集了共7445个汉字和图形符号,其中汉字6763个,分为二级,一级汉字3755个,二级汉字3008个。
汉字图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为一个“位”。
区的序号和位的序号都是从01到94,UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。
在文件HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。
在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII 码占用16个字节。
国家标准汉字字符集GB2312-80共收集了共7445个汉字和图形符号,其中汉字6763个,分为二级,一级汉字3755个,二级汉字3008个。
汉字图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为一个“位”。
区的序号和位的序号都是从01到94,UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。
在文件HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。
在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。
在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。
这样,将汉字机内码减去0A0AH就得该汉字的区位码。
例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。
所以“房”的区位码为0B7BFH-0A0A0H=171FH。
将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第
23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1)
×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。
ASCII码的显示与汉字的显示原理相同,在ASC16文件中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,不过每个ASCII码在文本中只占1个字节并且小于80h,每个ASCII码为8X16点阵,即在ASCII16文件中,每个ASCII码的点阵也只占16个字节。
在电脑中,所有的数据都是以0和1保存的,按不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
汉字字模
得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状
OSI模型七层及各层英文表示:
应用层application
表示层presentation
会话层session
传输层transport
网络层network
链路层data link
物理层physical。