资源描述
第五章汉字输入技术,延边大学计算机科学与技术系,内容,汉字输入技术概述汉字键盘输入技术汉字键盘输入系统Windows汉字输入技术Linux下的汉字输入系统,一、汉字输入技术概述,汉字输入发展史汉字输入分类汉字输入技术发展和应用,1、问题提出,早期,计算机主要通过键盘输入文字信息在计算机出现以前,西文打字机的键盘早已定型,计算机很自然地利用了打字机键盘这一录入工具。在键盘上没有汉字,那么如何才能将汉字输入到计算机中?,2、大键盘方案,设计一个汉字大键盘。这个汉字大键盘上有几千个按键,每个按键对应一个汉字,汉字按照偏旁部首在键盘上分区排列,以便于快速检字。大键盘的思想经过实践证明是失败的,它存在的问题主要是在键盘上找字困难,不能输入键盘上没有的汉字,设备本身价格太高等。,3、基于西文键盘的汉字编码输入,这是到目前为止最成功的计算机汉字输入方法。汉字编码输入是最早的汉字输入方法,已知最早的计算机汉字编码输入始于20世纪50年代的俄汉机器翻译研究,但只能用电报码或四角号码做汉字编码。在大陆,1978年5月上海电工仪器研究所部工程师支秉彝创造了一种“见字识码”法,并被上海市内电话局采用,从而率先使计算机的汉字输入进入了实用阶段。在港台及海外,以“王安三角”为发端,陆续涌现出“仓颉”、“呒虾米”、“行列”、“唯物”等一大批繁体汉字输入法。进入80年代后,在联想汉字、四通中文电脑打字机之后中国的汉字编码出现了“万马奔腾”的局面。在大陆涌现出了五笔、自然码、郑码、拼音、智能ABC、智能狂拼、纵横等上千种的输入法。,4、语音输入,用了多年的键盘输入方式,在1997年左右突然受到猛烈的冲击,各大厂商包括IBM、微软、摩托罗拉、中自、紫光等公司纷纷推出自己的非特定人语音输入系统或者连笔字手写输入系统。美国微软公司于1997年9月在北京推出中文非特定人连续语音识别系统ViaVoice。ViaVoice是目前在市场上占据统治地位的语音输入系统。,5、手写体汉字识别输入,通过书写汉字记录信息已经有几千年的历史,这也是使用汉字的中国人的普遍习惯,所以手写识别输入是符合中国人记录信息习惯的。在1997年以后就已经有基本实用的手写汉字识别输入系统,其中佼佼者为中自公司的“汉王99”、摩托罗拉公司的“慧笔”和清华紫光公司的“紫光笔”等。,6、印刷体汉字识别输入,我国对印刷体汉字识别(简称OCR,OpticalCharacterRecognition)的研究始于70年代末80年代初,经过科研人员几十多年的辛勤努力,印刷体汉字识别技术的发展和应用,已经有了长足进步。清华大学电子工程系、中国科学院计算所智能中心、北京信息工程学院、沈阳自动化研究所等单位分别研制开发出实用化的印刷体汉字识别系统。清华大学电子工程系研制的清华TH-OCR产品,占据着最大的市场份额,代表着中文OCR技术发展的潮流。,内容,汉字输入发展史汉字输入分类汉字输入技术发展和应用,1、分类,汉字的输入两大类:编码输入自然输入语音识别输入字形识别输入手写体识别输入印刷体识别输入,2、键盘编码输入,键盘编码输入首先把需要输入计算机的所有汉字用键盘上的若干个按键编码,这些按键组成的序列称为对应汉字的输入码。通过在键盘上输入某个按键序列,并由计算机中的输入系统把这个序列转换为对应的汉字,从而达到输入汉字的目的。优点:输入快速、无需添加额外设备缺陷:输入方式和人们使用语言文字的习惯不符、用户需要化额外的时间学习等。,3、语音识别输入,汉字语音识别输入利用产生声音的物理模型,通过语音分析手段,预先将一些语音的特征提取出来,并存储在处理系统中。当语音信号输入时,处理系统根据对该信号所提取的特征参数和所存储的参考特征进行比较,通过逻辑判断方法和“距离”测量法对语音进行识别。,3、语音识别输入(续),自然界的声音和人讲话的语音,都是模拟信号,不能直接输入计算机,因此在语音输入的过程中,我们必须通过语音卡(声卡)等设备,把模拟的语音信号转换为数字语音信号输入计算机。然后计算机利用程序对输入的数字语音信号进行统计、判断和识别,并最终把它翻译成计算机能够理解的汉字的内码信息。语音识别输入技术有着广阔的应用前景缺点:由于不同人的口音差别较大,语音的准确识别比较困难,4、汉字识别输入,汉字识别输入根据模式识别原理,通过汉字的字形信息识别,产生汉字的内码,实现汉字的识别输入。汉字识别输入的原理是通过抽取代表未知汉字模式本质的表达形式与预先存储在计算机中的标准汉字的模式表达形式的集合逐一进行匹配,用一定的准则进行判别,找出最接近输入汉字的那个标准汉字。汉字识别输入技术可分为印刷体汉字识别输入和手写体汉字识别输入两大类。,5、手写体汉字识别输入,手写体识别输入方法把手写字的位置信息首先转换成二进制的数字编码信息,并对手写字进行智能化的识别,并产生与之匹配的数字编码的中文或英文字符,同时所产生的字符也送给显示屏显示,最后经过输入者确认后才作为正确的输入结果。可分为联机手写汉字识别输入和脱机手写汉字识别输入,5、手写体汉字识别输入(续),手写体识别输入难于印刷体识别输入脱机手写体识别输入又难于联机手写体识别输入联机手写体识别输入是一种人工实时地把汉字输入计算机的方法,它利用书写板把笔画变为电信号,输入计算机的是以坐标点序列表示的笔尖移动轨迹,因而被处理的是一维的线条(笔画)串,这些线条串含有笔画数目、笔画走向、笔顺和书写速度等信息。脱机手写汉字识别处理的仅是二维的汉字点阵图象,是汉字识别领域中最后一个十分困难的问题,目前仍然处于实验室研究阶段。,5、手写体汉字识别输入(续),6、印刷体识别输入,印刷体识别输入是利用扫描器对已有的文书资料进行扫描,将扫描结果送入计算机中,计算机对所得图像进行去污点和干扰、行字切分、二值化、细化、抽取轮廓、平滑和规范化等处理,然后再由计算机根据所得图像的轮廓与计算机字库中的汉字点阵进行匹配,从而转换成相应的汉字的技术。应用范围:图像处理、桌面排版、印刷出版、字符识别、图文数据库、广告美术设计、多媒体图文通讯和办公自动化等。,6、印刷体识别输入(续),TH-OCR2000,6、印刷体识别输入(续),内容,汉字输入发展史汉字输入分类汉字输入技术发展和应用,1、汉字输入计算机的主流技术汉字键盘输入技术,键盘输入使用的是人的十个手指,灵活方便,符合人体工程学原理,绝大多数人愿意接受这一输入方式。键盘输入具有输入快速、省力、方便等其它输入方式无法比拟的优点。随着计算机技术的发展,软件技术弥补了汉字编码的很多不足。句子输入、词组输入、智能输入等技术使键盘汉字输入系统更加好用,输入更加快速方便。,2、广泛的应用途径语音识别输入技术,语音识别技术的渗透性很强,在未来它将无处不在语音拨号语音查询工业控制伤残人设备家电计算机辅助教育,3、数字化时代的新宠汉字识别输入技术,随着手机的普及应用,“拇指经济”迅速升温,人们越来越寻求短信输入的快捷和方便,手写又成为一种时尚,受到人们的青睐。随着各种掌上型信息终端及各种智能化、数字化产品的普及,在人们生活的许多地方,如掌上电脑、新型智能固定电话、各类平板电脑,甚至是街头的POS机及银行、车站等的触摸屏等,都已大规模地应用了手写输入技术。,二、汉字键盘输入技术,键盘汉字键盘输入原理键盘汉字输入的总体流程输入码对照表的设计,1、键盘,1234567891011121314,1516171819202122232425262743,58303132333435363738394029,424445464748495051525354,57,69535574,71727378,757677,79808129,8283,2、扫描码(ScanCode),外部设备必须通过控制器和主机连接,所以键盘本身有一个控制器。键盘控制器完成的主要工作是:加电或系统需要时对键盘进行检测,扫描键盘、消除重键和自动重发,保存扫描代码,与主机进行双向通信,以及向主机传送按键的扫描码(ScanCode)等。所谓扫描码是指根据按键在键盘上的位置按照从左到右,从上到下的原则从1开始给按键编的代码。,3、键盘工作原理,当用户在键盘上按下一个按键后,控制器就能通过扫描矩阵得到按键的位置,从而把这个位置信息转换为该按键的扫描码,并存储在控制器的缓冲区中。然后控制器产生一个键盘的硬件中断,由这个硬件中断通过端口从键盘控制器的缓冲区中取得这个按键的扫描码,并把它转换为对应的ASCII码,最后把2个字节的扫描码和ASCII码存储到计算机内存的键盘缓冲区中,供系统使用。,4、部分扫描码和ASCII码表,表6.1按键扫描码和ASCII码对照表(十六进制),内容,键盘汉字键盘输入原理键盘汉字输入的总体流程输入码对照表的设计,1、西文字符的输入,使用的键盘是西文键盘,英文或欧洲语系等拼音文字,由于文字总数一般为几十个,所以键盘上的按键就足以对映到每一个文字。用西文打字时,敲入的按键就可以直接根据当前的代码页(CodePage)转换为西文字符的内码从而显示在当前应用程序的窗口中。如当前是英文键盘,那么在键盘上按下按键“A”后,计算机就可以根据英文键盘的布局把这个按键转换为字符“A”的ASCII码,并送给应用程序,从而在界面上显示这个字符“A”。,2、汉字的编码输入举例,3、汉字编码输入的前提,要实现把输入码转换成机内码这个功能必须具备一个前提条件,那就是输入系统必须先于应用程序得到用户按键的扫描码或ASCII码,否则如果应用程序先得到的话,那它就会对按键进行处理,那样输入系统就没有办法进行工作了。从键盘接收的按键消息是操作系统的I/O模块处理的,它肯定先于应用程序得到按键的扫描码,然后由它负责把这些扫描码转换为ASCII码,存放在键盘缓冲区中,那么只要保证输入系统先于应用程序拿到键盘缓冲区中的内容就可以了。,4、键盘HOOK,一般而言,应用程序从键盘缓冲区读字符,总会调用系统的读字符功能来实现的。通过系统提供的HOOK(钩子)机制来实现输入系统先于应用程序得到键盘按键。键盘hook实现原理:假设原来的读字符功能调用是GetChar()设计了一个输入系统,里面由一个函数NewGetChar()把NewGetChar作为一个钩子钩到GetChar上,那么以后应用程序调用函数GetChar实际调用的是NewGetChar在NewGetChar中,它实现调用原来的GetChar函数从缓冲区读到字符,然后把这些字符传递给输入系统,让输入系统处理,输入系统处理完后,把结果给NewGetChar,由它把结果返回给应用程序。需要注意的是NewGetChar和GetChar的参数和返回值应该一致。,5、键盘HOOK原理图,6、Windows下的HOOK,HHOOKSetWindowsHookEx(intidHook,HOOKPROClpfn,HINSTANCEhMod,DWORDdwThreadId);其中,idHook指定钩子的类型,常用的有WH_MOUSE、WH_KEYBOARD、WH_GETMESSAGE等,键盘操作应该设定为WH_KEYBOARDlpfn标识钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数,即当不管系统的哪个窗口有键盘输入马上会引起lpfn指向的函数的动作;hMod是钩子函数所在模块的句柄,我们可以很简单的设定其为本应用程序的实例句柄dwThreadId是钩子相关函数的ID用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息。,内容,键盘汉字键盘输入原理键盘汉字输入的总体流程输入码对照表的设计,1、总体流程图,2、工作流程,用户在键盘上输入汉字的输入码;键盘控制器在检测到按键后,根据按键的位置产生它们的扫描码,然后存入键盘内的缓冲区中,并触发一个键盘的硬件中断;键盘中断处理程序从键盘内的缓冲区中取出扫描码;键盘中断处理程序把扫描码转换为ASCII码,和扫描码一起存储在内存的键盘缓冲区中;应用程序调用取字符模块取字符,实际调用的是汉字输入处理模块,汉字输入处理模块从内存的键盘缓冲区取得扫描码和ASCII码。在西文系统中,应用程序可以直接通过取字符模块从键盘缓冲区获得西文字符(),从而结束输入过程;,2、工作流程(续),汉字输入处理模块判断读到的字符,是输入系统需要处理的吗?是则把输入码传送给代码转换模块;不是则直接返回给应用程序()(如F1、Insert等按键,输入系统不需要处理),结束;代码转换模块根据输入码查输入码对照表;代码转换模块从输入码对照表获得对应的汉字机内码;代码转换模块把汉字机内码交汉字处理模块;汉字处理模块通过用户干预后,把汉字机内码交应用程序,结束。,内容,键盘汉字键盘输入原理键盘汉字输入的总体流程输入码对照表的设计,1、输入码对照表,输入码对照表是汉字键盘输入中的一个重要数据结构,是汉字输入码到机内码转换的核心,它反映了汉字输入码和机内码之间的映射关系。一般来说,系统有一种输入法,就需要为它配备一张对照表,但内码输入法是一个特例,它可以根据输入码计算出机内码,所以不需要对照表。对照表是以文件的形式存储在计算机中的,一般一张对照表就是一个文件,当然也有是由一系列的文件组成的。对照表一般有两种类型:字对照表和词对照表。在字对照表中,表示的是一个一个汉字和输入码的映射关系,而词对照表则表示词(组)和输入码的映射关系。,2、输入码对照表结构的分类,定长结构变长结构计算结构索引结构其它,4、定长结构,定长结构的每个表项的长度固定。每个表项一般由有两个域组成:一个域存放汉字或词(组)的机内码,另一个表项存放此汉字或词(组)的输入码。每个域的长度是固定的。如一个表项固定长度为6个字节,其中输入码占4个字节,汉字占2个字节。由于一个汉字的机内码一般由2个字节构成,所以字对照表可以采用定长结构。词对照表一般不会采用这种结构,是因为词组长度不一,容易造成存储空间的浪费。,4、定长结构(续)结构,4、定长结构(续),检索方法扫描法二分法假设需要检索的输入码为S,对照表的表项数为N,分别用ICi,HZi表示第i表项的输入码和汉字。,4、定长结构(续),扫描法:首先,为了方便检索,需要把对照表按照输入码的大小从小到大排序。扫描法是指每次查找都从头开始,一直找到和S相同的输入码项i;然后继续往后查找,找到和S不同的输入码项j;那么,第i项到第j-1项,共j-i项对应的汉字就是输入码S对应的重码集。最大的比较次数为N,最小的比较次数为1,平均为(N+1)/2。,4、定长结构(续)扫描法,4、定长结构(续),二分法:二分算法描述如下:设置一个值B=0,E=N;如果BE,算法失败结束;否则M=(B+E)/2;然后把ICM和S比较;如果相等,则说明找到了一项,由于输入码相等的汉字是相邻存放的,所以只要进行前后的扫描,可以得到所有的输入码为S的汉字,结束;如果ICM小于S,则B=M+1,转;如果ICM大于S,则E=M-1,转。,4、定长结构(续)检索算法,4、定长结构(续),二分法的最大的比较次数为log2N,最小的比较次数为1,平均约为log2N-1。假设N=20902,则扫描法的平均比较次数为(20902+1)/2=10452,而二分法的比较次数为(log220902-114,明显比扫描法好。定长结构的对照表具有表结构简单,容易构建,检索算法简单等优点,但在存储空间上存在缺陷。,5、计算结构,计算结构常用于设计字对照表。每个表项对应一个汉字,表项等长,内容为该汉字对应的输入码。这种结构的对照表的表项必须按照汉字的特定序列进行排列,不能无序。一般情况,都是按照汉字内码进行排序,从而方便确定每个表项对应的汉字机内码。,5、计算结构(续),输入码,0123n,5、计算结构(续),计算结构举例纵横码的码元集合为:1234567890码长为14,是不等长码。字符集采用Unicode/ISO10646-1993。Unicode内码从4E00H到9FA5H共20902个汉字。每个表项的内容是输入码,为14个数字,每个数字可以用BCD码来表示,需要3位(bits),4个数字则需要3412位,用2个字节表示。如果数字不足4位,用全“1”位填充。,5、计算结构(续),表项结构每个表项的大小为2个字节。整张对照表总共需要220902=41804个字节,按照机内码的大小从小到大排列。,5、计算结构(续),假设汉字的内码hz可以表示为:hz=hzhhzl|hzhR1,hzlR2R1=R|4EHRFFHR2=R|00HRFFH从上表我们可以得到序号i和内码hz的关系:i=(hzh-4EH)*0FFH+hzl则hzhi/0FFH+4EH/表示取整hzl=imod0FFH那么,对照表的检索过程就是遍历表的过程,也就是当发现第i项表项和当前输入码的BCD码一致时,可以通过上面的计算得到该汉字的机内码,从而实现转换过程。,5、计算结构(续),优点是节省空间上例中的对照表比采用等长结构可以节省一半的空间(省了20902个汉字的空间),但存在需要遍历整张对照表的问题,比较次数为N。当一个汉字有多个编码时,就存在问题了,需要设置附加表。,6、变长结构,每个表项对应一个输入码。每个表项有两个域:一个域存放输入码,另一个域存放和该输入码对应的所有重码字或词组集合。由于第二个表项的内容不定,所以长度无法确定,造成表项不等长。这种结构的输入码对照表减少了表项的数目,不需要为每个汉字存放输入码,所以存储空间相当等长结构有明显的减少。,6、变长结构(续),以20902个汉字的纵横码对照表为例,定长结构需要(22)2090283608(字节)(2个字节的BCD输入码,2个字节的汉字机内码),而变长结构只需要2090226123254050(字节)(20902个汉字和6123个BCD输入码),比定长结构少了近30K,超过三分之一。这种结构存在的问题是检索时间相对也较长,一般采用扫描法,需要遍历整张对照表。,6、变长结构(续),6、变长结构(续),纵横码的不等长对照表结构描述::=:=:=:=:=假设需要检索的输入码为S,对照表的表项数为K,分别用ICi,LENi,HZi表示第i表项的输入码、汉字集长度和汉字重码集合。,6、变长结构(续),6、变长结构(续),假设输入码的个数为K,那么最大的比较次数为K,最小的比较次数为1,所以比较次数依旧平均为(K+1)/2。由于K比N小,所以比较次数比等长结构少。如纵横码的例子,变长结构的平均比较次数是(6123+1)/2=3062次,而等长结构如采用扫描法则需要(209021)/2=10452,是变长结构的3倍!,7、索引结构,索引是一种最常用的对照表结构,也是一种高效率的检索结构。一般索引结构的对照表分成两部分:索引表和码表。索引表的表项由两部分组成:输入码和指针(指向码表中输入码对应的汉字和词组的首址)。码表的结构基本和变长结构类似。,7、索引结构(续),7、索引结构(续),每个索引表项对应一个码表项,而且是一对一的关系,有多少个索引项就有多少个码表项。一般而言,索引表中的每一个表项是等长的,而码表中的每一个表项长度是不相等的。索引结构结合了等长和变长的优点,通过把输入码和汉字串分开的方法,使得索引表组织类似等长结构(输入码域和指针域的长度一般固定),而码表组织类似于变长结构,从而提高了检索效率,也节省了空间。,7、索引结构(续)二分法,7、索引结构(续)-举例,拼音输入码为例:比较等长、变长和索引结构的对照表的对照表大小和检索效率。由于拼音由21个声母和35个韵母组成,不考虑声调。所以可以采用压缩方法来存放输入码,用121表示21个声母,可以用5位来表示,用135表示35个韵母,可以用6位来表示,一共11位,为了方便起见,共用两个字节存放(如果无声母或韵母,用0表示)。,7、索引结构(续)-举例,7、索引结构(续)-举例,等长结构::=:=:=:=变长结构::=:=:=:=:=,7、索引结构(续)-举例,索引结构::=:=:=:=:=:=:=,7、索引结构(续)-举例,三种结构比较表,7、索引结构(续)稀疏索引,7、索引结构(续)稀疏索引,省略了索引表中的输入码部分索引表的表项是对应于整个编码空间的,也就是即使这个输入码没有对应的汉字,仍作为一个表项存在于索引表中如某个输入法的码元集合为26个字母,码长为4,则应该有26262626456976个表项表项的排列是按照输入码由小到大的次序来排列,也就是从“aaaa”到“zzzz”,假如某个输入码是S1S2S3S4,我们可以计算得到此输入码对应的索引表表项的序号i:i=(S1-a)263(S2-a)262(S3-a)26S4-a把序号乘以每个表项的大小就得到了此输入码指向码表的指针在码表中的首址,7、索引结构(续)稀疏索引,问题:可能索引表过大如上面举的例子,如果每个表项长度为6个字节,那么索引表长度为4569766字节,约2.6M字节的空间。为了节省空间,我们一般采用部分索引的技术取一个输入码中的部分编码进行索引,7、索引结构(续)稀疏索引,假设码元集合中的码元数为m,输入码的长度为n,则每个索引项的长度2(假设指针大小为2个字节),如果对i(i=n)个字节输入码作索引,那么索引表的长度TL为:TL=mi*2即TL=mi*2则i=logmTL/2一般TL的大小在10k左右当采用数字编码时m=10,则i=3当采用字母编码时m=26,则i=2,三、汉字键盘输入系统,汉字输入系统的分类汉字输入系统的功能汉字键盘输入系统的工作流程,1、按系统在计算机中实现的层次,可以分为:系统层的输入系统应用层的输入系统,2、按操作系统平台,主要有:DOS下的输入系统Windows下的输入系统Linux下的输入系统Unix下的输入系统MacSystem下的输入系统嵌入系统种的的输入系统,3、按汉字内码的简繁,可以分为:简体输入系统繁体输入系统,4、按汉字的字符集,分为:GB2312的输入系统GBK的输入系统GB18030的输入系统BIG-5的输入系统ISO10646的输入系统,5、按输入码类别,分为:音码输入系统形码输入系统音形码输入系统流水码输入系统,内容,汉字输入系统的分类汉字输入系统的功能汉字键盘输入系统的工作流程,1、汉字/词组输入,单字输入我你的词组输入我们计算机短语、短句输入我的非常多不明白科技是第一生产力句子输入我到饭店去吃饭。,2、候选字/词提示和选择,重码不可避免输入系统必须具备候选字/词提示的功能应该常用用字、词在前提高容错的功能,3、中英文状态切换,存在中文和英文两种状态在中文状态,可以通过输入汉字输入码输出汉字在英文文状态下,整个键盘都是西文符号,4、翻页,当输入的汉字输入码对应的候选字/词比较多时,输入系统无法在候选框中显示所有的候选字/词,只能通过分页方式显示。可使用到翻页键显示上/下一页的候选字/词。常用的翻页键分为前翻页键和后翻页键,一般输入系统的前/后翻页键为“-”和“+”、“,”和“.”、“”和“”、“PageUp”和“PageDown”等。,5、输入码清除、删除、结束键,当输入的输入码有误时,可以通过输入码删除键删除刚输入的这个输入码符,也可以通过输入码清除键删除所有输入的输入码。实际上这两个键的作用是提供一种输入码的简单编辑功能。绝大多数的输入系统不需要输入码结束符,只有输入码键和选择键冲突时才需要输入码结束符来区分两种状态。,6、联想,当用户输入了一个汉字后,系统提示以这个汉字为首字的词组供用户选择(不包括首字),这种技术称为联想技术。如用户输入了“计”,则系统提示以“计”作为首字的词组剩余部分,如“算机”、“划”和“策”等,8、全角和半角,键盘上的西文字符在输入计算机时有全角和半角两种方式。在早期DOS系统下,ASCII字符是中文字符的一半大小,所以称ASCII字符为半角字符采用双字节内码、和中文等宽的西文字符为全角字符。如半角字符“0”的ASCII码是30H,而全角字符“”的Unicode内码是0FF10H。在Windows等系统中,由于是图形界面,所有的字符不是等宽字符,所以一个ASCII字符不再是一个中文内码字符的一半。,9、符号输入,内容,汉字输入系统的分类汉字输入系统的功能汉字键盘输入系统的工作流程,1、流程图,2、中文输入和西文输入的差异,从以上的流程我们可以发现,在西文环境下,用户每按下一个按键应用程序都会接收到。而在中文环境下,用户按下一个按键后,应用程序可能接收不到任何的东西,因为输入系统还没有机内码返回,需要更多的按键后才能有机内码返回。如图6.7所示,用户输入“w”和“o”后,输入系统没有输出汉字“我”,必须等到用户再输入“1”后,才有汉字输出。这也是汉字输入和西文输入的最大差异。,Windows汉字输入技术,Windows汉字输入技术概述Windows下汉字输入原理在SDK和DDK环境下开发输入系统,1、界面,2、概念,输入法Windows中的汉字输入法称为IME(InputMethodEditor),它的本质是一个转换引擎,通过查字典方式,把键盘输入的按键消息转换为各种语言的文字信息。另外,它还提供和用户、操作系统的接口。输入法管理器输入法管理器简称为IMM(InputMethodManager),它是一个管理各种IME,并在IME和应用程序间进行通信的系统部件。它不仅为程序员提供了开发输入法的接口,还为用户提供了管理输入法的界面。,2、概念(续),2、概念(续),多文种环境(Multi-lingualEnvironment)所谓多文种环境是指系统可以为使用各种不同语言文字体系的用户提供了支撑他们母语的操作环境。Windows的输入体系支持多文种环境,包括中文、日文、韩文、法语和德语等上百种不同的语言体系。也就是说,在Windows下,不仅可以输入汉字,也可以输入其它语言文字。汉语言文字仅是其中的一个环境而言。键盘布局(KeyboardLayout)键盘布局规定了键盘上每个按键的物理位置以及每个按键对应的字符。每个键盘布局对应于一种语言,从而根据这种语言的定义和当前的输入法把按键转换为该语言的文字信息。在Windows中,提供了多种不同的键盘布局,其中就包括各种中文的键盘布局。每个汉字输入法就是一个键盘布局,如输入法“智能ABC”的键盘布局是“E004804”,通过注册表编辑器可以查看各种输入法的键盘布局,2、概念(续),3、特点,每个输入法只是整个多文种环境的一个部件而已,一个多文种环境包含多个输入法,如在WindowsXP中,多文种环境可以包含中文(中国大陆)、中文(中国香港)、中文(中国台湾)、日文、韩文等环境,每个环境可以有自己的输入法;每个应用程序都拥有自己的一个活动输入法,也就是说,输入法不再为所有的应用程序所共有,同样的一个输入法,可能运行多个实例;应用程序和输入法之间可以进行消息的传递,应用程序可以控制输入法的工作;支持从汉字词组到编码的反向转换。,内容,Windows汉字输入技术概述Windows下汉字输入原理在SDK和DDK环境下开发输入系统,1、Windows汉字输入模型,2、Windows汉字输入系统基本结构,3、Windows汉字输入原理,当用户在键盘上按下一个键后,在应用程序调用GetMessage/PeekMessage前,系统首先调用输入法的接口函数ImeProcessKey,通过这个函数判别输入法是否需要处理这个键,把这个键吃掉;如果返回TRUE,表示输入法需要处理这个键,那么系统设置虚键的值为VK_PROCESSKEY,然后应用程序接收到消息WM_KEYDOWN,其中的值为VK_PROCESSKEY;如果返回FALSE,则表示输入法不需要处理这个键,直接返回此键给应用程序,结束;当应用程序接收到消息WM_KEYDOWN后,在调用函数TranslateMessage时,系统把用户按下键的扫描码和虚键传递给输入法的接口函数ImeToAsciiEx。输入法在处理了按键后,根据处理方法的不同把各种消息存放在消息缓冲区中,这个缓冲区是作为函数ImeToAsciiEx的一个参数传递过来的。应用程序在消息队列中得到由输入法产生的消息,进行相应的处理。如果应用程序不处理这些消息,则把它传递给默认窗口(DefaultWindow),然后由系统就把消息传递给默认的IME窗口,由它来处理这些消息。,内容,Windows汉字输入技术概述Windows下汉字输入原理在SDK和DDK环境下开发输入系统,在SDK和DDK环境下开发输入系统,为了方便编程人员开发基于Windows的各种驱动程序,Microsoft提供了一套用于开发的DDK工具包,利用这套工具包就可以开发输入法。在DDK中,不仅提供了输入法的开发环境,还提供了相关文档以及一个区位输入法的实例代码。这个区位输入法经编译后,可以安装在Windows中。在DDK中的区位输入法的代码,为我们设计其它的输入法提供了基础,我们设计新的输入法主要就是在这个区位输入法的代码基础上进行修改,这样可以大大节省开发时间。,
展开阅读全文