优化单字节字符处理 的方法、系统及计算机程序产品 本发明一般涉及数据处理而更具体地涉及优化多字节字符编码方案中采用的单字节字符处理的方法、系统及计算机程序产品。
出现计算机之前,语言是口说然后作为形象写在纸上的。个人识别这些形象并能再生其声音及消息的含义。随着计算机的出现,必须将字符表示为计算机的存储器内的代码以便能存储与再生文本。早期计算机将它们的存储器构造成块(通常称作“字节”)而用各块来表示字符。然而,不同的计算机使用不同的字符编码方案,使得难于在计算机之间交换信息。
计算机工业为字节长度建立的标准是8位。8位字节能编码256个不同字符,足以处理大写英文并甚至扩展到小写。这成为称作美国标准信息交换码(ASCII)。
随着计算机的全球性传播,在处理文本时,要求计算机能识别与处理不同语言的文本。然而,大多数计算机是用在一种语言中的,导致各语言的不同字符集。对于单一语言的机器使用,这工作得很好。然而,当采用不同语言的机器共享或发送信息时,便产生了相同码点,即字符编码,可能表示不同字符集中不同字符的问题。
为了解决相同的码点表示不同字符集中不同字符的问题,建立了诸如“统一编码(unicode)”与“多码(multicode)”等多字节字符编码方案。例如,统一编码使用设计成支持以不同人类语言编写的文本的16位字符编码系统。多字节字符编码方案设计成允许计算机系统无歧义地交换文本信息,因为各码点表示唯一的字符。
然而,当前不常有能显示多字节字符编码方案中所有可能字符的字体集。通常,对于诸如英文等大多数西方语言地字体,只显示全体65535个统一编码字符中前256个。从而,如果应用程序在一个句子中使用来自多种语言的字符,或想要显示包含诸如英文文本与数学符号的数据串,诸如Times Roman等单个字体便不能显示所有字符。为了克服这一限制,太阳微系统公司已将多主字体(multiple hostfont)的概念引入到他们的Java虚拟机(JVM)中。为了说明如何实现多主字体概念,考虑下面的字体属性文件的摘录部分: dialog.0=Arial,ANSI_CHARSET dialog.1=WingDings,SYMBOL_CHARSET,NEED_CONVERTED dialog.3=Symbol,SYMBOL_CHARSET,NEED_CONVERTED #Exclusion Range info, exclusion.dialog.0=0100-20ab,20ad-ffff
在字体属性文件中,将Java Font Dialog映射到一系列主字体中,即Arial、WinDings及Symbol(在上述说明中)。对于诸如使用Arial的数学符号等不能用特定字体处理的字符,规定了该特定字体的排斥范围。例如,在上面说明中,Arial的排斥范围为0x100-0x20ab及0x20ad-0xfff,但没有规定字体WingDings与Symbal的排斥范围。此外,各字体与用来将诸如统一编码等各字符映射到基础编码方案(underlying encoding)理解的字节中的转换器关联。通用方案是如果第一主字体不能处理,即不支持,某一统一编码字符,便试用规定的第二主字体等等。目标是试图支持所要求的尽可能多的多字节字符集。
然而,多主字体的引入导致明显的性能降低,特别是在画文本串时。在这一情况中,对于串中的每一字符,必须执行两种检验。首先,必须确定该字符是否是指定的字体的排斥字符。第二,如果它不是排斥的字符,能否将这一特定字符映射到诸如ISO Latin-1等基础编码方案中。这种多重检验在所需时间方面已成为文本描绘的昂贵部分。
本发明的目的为提供优化多字节字符编码方案中的单字节字符处理的方法、系统及计算机程序产品。
为了达到上述目的,并按照这里所体现与广义描述的发明,公开了优化多字节字符编码方案中的单字节字符处理的方法、系统及计算机程序产品。该方法包括:(1)接收数据串,(2)将数据串作为整体传递给第一处理例程及(3)然后评估该数据串来确定该数据串中是否有任何字符为主字体所排斥的字符。该方法还包括(4)将数据串作为整体传送给第二处理例程及(5)评估数据串中有限数目的字符来确定该数据串是否能在基础编码方案下转换。
本发明认识到,在多字体环境中对于只包含ASCII字符的数据而言,检验数据串中各单个字符来确定该字符是否是给定字体排斥的字符,然后确定是否能将该字符映射,即转换,到基本编码方案中的传统方法通常是不必要的,通常,只需要第一主字体,即在大多数情况中,ASCII字符不是排斥字符并且能将这些字符映射到基本编码方案中。因此本发明引入与分别用多次函数调用检验各字符相反的在一次函数调用中检验整个数据串或数据串中有限数目的字符的属性的广义概念。这一方法方便了在多主字体环境中只包含单字节ASCII字符的采用多字节字符编码的数据串的高效处理。
在本发明的一个实施例中,接收数据串的步骤还包含从数据输入设备输入数据串。熟悉本技术的人员应容易理解诸如计算机键盘等任何能输入数据的设备都在本发明的预期范围之内。
在本发明的另一实施例中,传递步骤还包括将数据串作为数组传输给第一处理例程。熟悉本技术的人员应完全理解数组包含诸如表或矩阵结构等数据表示。
在本发明的又另一实施例中,传送步骤还包括将数据串作为数组传输给第二处理例程。如上面讨论的,熟悉本技术的人员应完全理解数组包含诸如表结构等数据表示。
在本发明的另一实施例中,评估步骤还包含用布尔运算“或”组合数据串中所有字符以形成单个字符,判定形成的单个字符是否是单字节字符及检验主字体的排斥范围来确定排斥范围是否包含单字节字符。
上文的描述已相当广义地概述了本发明的较佳与其它特征,从而熟悉本技术的人员可以更好地理解下面的本发明的详细描述。下面将描述构成本发明的主题的附加发明特征。熟悉本技术的人员应理解他们能容易地利用所公开的概念与特定实施例作为设计或修改其它结构来执行与本发明相同的目的的基础。熟悉本技术的人员还应理解这些等效构造并不偏离最广义地形成的本发明的精神与范围。
为了更完整地理解本发明,参见下面结合附图所作的描述,附图中:
图1示出提供实现本发明的适当环境的计算机系统的示范实施例;
图2示出采用本发明的原理的数据显示处理系统的实施例的高层框图;
图3示出按照本发明的原理优化单字符字符的处理的方法的实施侧的高层进程流程图;
图4示出按照本发明的原理在图3中示出的第一处理例程的第一实施例的高层流程图;
图5示出按照本发明的原理在图3中示出的第一处理例程的第二实施例的高层流程图;以及
图6示出图3中所示的第二处理例程的实施例的高层流程图。
参见附图,具体参见图1,其中示出了提供实现本发明的适当环境的计算机系统100的示范实施例。计算机系统100包含传统个人计算机(PC)120,后者包含处理单元121、系统存储器122及将系统存储器122耦合到处理单元121上的系统总线123。在所示实施例中,系统存储器122包含只读存储器(ROM)124及随机存取存储器(RAM)125。包含在诸如启动期间协助在个人计算机120内的元件之间传送信息的基本例程的基本输入/输出设备(BIOS)126通常存储在ROM124中。
个人计算机还包含硬盘驱动器127、诸如读与写可拆卸的盘129的磁盘驱动器128及诸如读CD-ROM盘131或读或写其它光介质的光盘驱动器130。硬盘驱动器127、磁盘驱动器128与光盘驱动器130分别用硬盘驱动器接口132、磁盘驱动器接口133与光盘驱动器接口134连接在系统总线123上。
这些驱动器及它们相关的计算机可读的介质为计算机120提供非易失性存储器。应指出虽然上述计算机可读的介质的描述指称硬盘、可拆卸的磁盘及CD-ROM盘,熟悉本技术的人员应容易理解诸如盒式磁带、快速存储卡等计算机可读的其它类型的介质也可用在示范性工作环境中。
可将若干程序模块存储在驱动器与RAM125中,其中包含操作系统、一或多个应用程序136、其它程序模块137与程序数据138。用户可通过键盘140及诸如鼠标器等指点设备142输入命令与信息到个人计算机120中。其它数据输入设备可包含麦克风、操纵杆、游戏盘、卫星碟、扫描器等。数据输入设备通常通过耦合在系统总线123上的串行端口接口146连接在处理单元121上,但也可利用诸如游戏端口或通用串行总线(USB)等其它类型的接口连接。监视器147或其它类型显示设备也通过诸如视频适配器148等接口连接在系统总线123上。
个人计算机120可利用对诸如远程计算机149等一或多台远程计算机的逻辑连接在联网环境中操作。远程计算机149可以是服务器、路由器、对等设备或其它普通网络节点,并通常包含所有对个人计算机120描述的部件,虽然只示出了存储器设备150。图1中描绘的逻辑连接包含局域网(LAN)151及广域网(WAN)152。
当采用LAN联网环境中,个人计算机通过网络接口153连接在LAN151上。当在WAN联网环境中使用时,个人计算机120通常包含用于在诸如因特网等WAN152上建立通信的调制解调器154或其它装置。可以是内置或外置的调制解调器154通过串行端口接口146连接在系统总线123上。在联网环境中,可将相对于个人计算机120或其部分描述的程序模块存储在远程存储器设备上。应容易理解,所示网络连接是示范性的并且也可有利地采用在计算机之间建立通信链路的其它装置。
应指出上文的讨论旨在提供可有利地实践本发明的示范计算环境的简要一般性描述。虽然示出的示范性环境是在分布式计算环境的一般上下文中描述的,熟悉本技术的人员应理解本发明也可在其它环境中实现。在分布式计算环境中,任务是由通过通信网链接的远程处理设备执行的。程序模块可位于本地与远程存储器设备两者上。诸如例程、程序、部件与数据结构等程序模块执行特定任务或实现特定抽象数据类型。本发明也可在结合个人计算机或组合其它程序模块的操作系统上运行的应用程序的上下文中实行。此外,熟悉本技术的人员应容易理解本发明可用其它计算机系统配置实践,其中包含手持式设备、多处理器系统、小型计算机及大型主计算机。
参见图2,其中示出了采用本发明的原理的数据显示处理系统200的实施例的高层框图。处理系统200包括操作系统210,后者具有分别耦合在诸如Times Roman、Arial与Courier等多种主字体230a、230b、230c上的内核220及诸如ISO Latiu-1等基础数据编码方案240。通常,操作系统210从诸如键盘等数据输入设备250接收一般由要显示在诸如监视器等显示设备270上的多个字符组成的数据串260。应指出数据串260不一定非来自数据输入设备250不可,而在其它有利实施例中,可来自因特网或应用程序。数据串260中的字符是用诸如统一编码或多码等多字节字符编码方案编码,即表示的。在较佳实施例中,数据串260中的单个字符是用16位表示的。
当前,如前面讨论的,必须为数据串260中的每一个字符执行两次检验。起初,必须确定该字符是否是指定的主字体的排斥字符。如果确定该字符并非指定主字体的排斥字符,随即进行另一判定该字符是否能映射到基础编码方案240中。这些检验是描绘文本串的时间“开销”的主要部分。本发明认识到多字体环境中对于只包含ASCII字符的数据串而言,检验数据串的各单个字符来确定该字符是否是给定字体的排斥字符,随后判定该字符是否能映射,即转换,到基础编码方案中的传统方法是不必要的。通常,只需要第一主字体,即在大多数情况中,ASCII字符不是排斥字符,并可将它们映射到基础编码方案中。
参见图3,其中示出了按照本发明的原理优化单字节字符的处理的方法的实施例的高层过程流程图300。该方法从起始步骤310开始,其中示出了接收显示类似于图2中所示的数据串260的数据串s的请求。收到显示请求时,作为其整体将整个数据串s传递给第一处理例程320去判定数据串s中是否有任何字符是指定的主字体的排斥字符。在较佳实施例中,将数据串s作为数组,如字符表,传输给第一处理例程320。后面将相对于图4与5描述第一处理例程320的两个实施例,并且继续参照图3。然而,熟悉本技术的人员应理解上文中的实施例及本发明的系统,通常也可在硬件、固件、软件或它们的任何组合中实现。
参见图4,其中示出了按照本发明的原理的图3中所示的第一处理例程320的第一实施例的高层流程图400。在所示的第一实施例中,第一处理例程320是在称作IsExcludedAny的软件函数调用的上下文中描述的。如在开始步骤410中所示,随着作为其整体接收数据串s,起动函数调用IsExcludedAny。接着,如判定步骤420中所描述,判定进程是否在数据串s的结束处。如果在判定步骤420上的判定是在数据串s的结束处,控制进行到返回“伪”步骤430。接着,如在返回“伪”步骤430上所描述的,将“伪”指示返回给第一处理例程320。
然而,如果在判定步骤420判定不在数据串s的结束处,则控制进行到处理下一个字符步骤440。如步骤440处所示,将数据串s中下一个未测试的字符传递到判定步骤450去判定该未测试的字符是否是指定字体的排斥字符。这一判定是通过检验该字符的逐位表示来判断它是否在该指定字体所定定义的排斥范围中来完成的。
如果该字符是排斥字符成立,便将“真”指示返回给第一处理例程320,如在返回“真”步骤460处所述。然而,如果该字符并非排斥字符,控制返回到判定步骤420去重复评估处理直到遇到表示数据串结束的字符为止。表1中陈述示范IsExcludedAny算法。
表1boolean IsExcludedAny(char[]string){ for(i=0;1<string.length;i++) { corelogic of isExcluded on string[i] }}应指出,isExcluded函数是本技术中知名的传统算法,因此在此不再详细描述。
现在参见图5,其中示出了按照本发明的原理的图3中所示第一处理例程320的第二实施例的高层流程图500。如在接收数据串s步骤510上所描绘的,随着作为其整体接收数据串s而起动第一处理例程320。接着,如在步骤520中所述,组合数据串s中所有字符来构成得出的单一字符。这是使用布尔“或”运算逐位“或”运算所有字符来完成的。
单个结果字符构成之后,如判定步骤530中所述,评估得出的字符来判定它是否是单字节字符。如果判定该得出的字符不是单字节字符,控制进行到返回“真“步骤540。接着,如步骤540中所示,将“真”指示返回给第一处理例程320。
然而,如果在判定步骤530上判定得出的字符是单字节字符,控制进行到另一判定步骤550。如在判定步骤550中所述,检验为特定主字体所定义的排斥范围来判定它们是否包含任何单字节字符。如果排斥范围包含单字节字符成立,便将“真”指示返回给第一处理例程320,如步骤540中所示。
反之,如果判定单字节字符并非排斥字符,即排斥范围不包含单字节字符,控制便进行到返回“伪”步骤560。接着,如步骤560中所述,将“伪”指示返回给第一处理例程320。
返回参见图3,如上面讨论的,第一处理例程320得出的结果为“真”或“伪”指示之一。如果结果是“真”指示,即数据串s包含排斥字符,便将数据串s传递给传统进程330。简言之,如所示,传统进程330利用传统例程将数据串s分析成子串,用兼容的主字体处理各子串。
在“伪”指示的情况中,再一次作为其整体将数据串s传送给第二处理例程340。在有利实施例中,数据串s是作为数组,如字符矩阵,传输给第二处理例程340的。接着如所示,第二处理例程340评估数据串s中有限数目的字符来判定每一个字符是否能在基础编码方案下转换。下面相对于图6并继续参照图3描述第二处理例程340的示范实施例的进程流程。
参见图6,其中示出了图3中所示的第二处理例程340的实施例的高层流程图600。在所示的实施例中,第二处理例程340是按照称作CanConvertAll的函数调用讨论的。当CanConvertAll从第一处理例程320接收数据串时启动该进程,如在开始步骤610中所示。
数据串s接收之后,识别数据串s内具有最小与最大值的字符,如步骤620中所示。然后如判定步骤630中所示,评估识别出的最小字符来确定该字符的值,即逐位表示,是否在基础编码方案所规定的范围之内。如果该字符不在所规定的范围之一中,则如所示将控制传递给返回“伪”步骤640,此时将“伪”指示返回给第二处理例程340。然而,如果最小字符在基础编码方案所支持的,即能转换的,规定范围之一中,便分配给该范围第一标识符r1,如步骤650中所示。
分配第一标识符r1之后,评估识别出的最大字符来判定其值是否在基础编码方案所支持的范围之内,如判定步骤660中所示。如果该字符的最大值不在规定范围之一中,便将控制传递到返回“伪”步骤640,然后进行返回”伪”指示给第二处理例程340。然而,如果最大字符是在基础编码方案所支持的规定范围之一中,便分配给该范围第二标识符r2,如步骤670中所示。
分配了第二标识符r2之后,互相比较第一与第二标识符r1与r2,如在判定步骤680中所示。这里,将与第一与第二标识符r1与r2关联的特定范围互相比较以判定它们是否相同。如果比较结果是第一与第二标识符r1、r2不等,即最小与最大字符不在一个特定范围内,便如所示将控制传递到返回“伪”步骤640,然后进行返回“伪”指示给第二处理例程340。反之,如果第一与第二标识符r1、r2两者相等,便如所示将控制传递到返回“真”步骤690,返回“真”指示给第二处理例程340。
应指出CanConvertAll的实现在较大程度上取决于转换器功能。在上述示例中,如果特定转换器能转换许多字符范围,可将整个字符串传递给CanConvertAll,后者只检验最小与最大字符。如果两个字符落在一个范围中,便能得出结论,其它字符都能转换。在这一情况中,不需要直接检验数据串中的其它字符。
回头参见图3,如果第二处理例程340接收到“伪”指示,便将数据串s传递给传统进程330供进一步处理(见上文)。如果,反之,第二处理例程340收到“真”指示,即数据串s中的所有字符都能映射到基础编码方案中,便将数据串s连同指定的字体一起向下传递给基础图形例程350供显示。
总之,如果来自函数调用IsExcludedAny与CanConvertAll的结果分别是“伪”与“真”,可得出结论数据串中没有排斥的字符且所有字符都能映射到基础编码方案中。便可立即将整个数据串向下传递给“低级”描绘例程,无须为单个字符重复使用传统函数,即IsExcluded及CanConvert。
应指出虽然已在计算机系统的上下文中描述了本发明,熟悉本技术的人员容易理解本发明也能作为多种形式的计算机程序产品分发;无论用来实际进行分发的信号承载介质,即计算机可用的介质的特定类型如何,都能应用本发明。信号承载介质的实例包含诸如软盘与硬盘驱动器等可录制型介质及诸如数字与模拟通信链路等传输型介质。
在较佳实施例中,本发明是实现在编程为执行这里描述的方法的计算机系统中的。从而,在有利的实施例中,执行这里所公开的方法的指令集常驻在通常配置成图1中所示的一或多个计算机系统的RAM中。在计算机系统需要之前,可将指令集作为计算机程序产品存储在另一计算机存储器中,诸如盘驱动器中。在另一有利实施例中,也可将计算机程序产品存储在另一计算机上并用诸如LAN或WAN等内部或外部通信网分另将其传输给用户的工作站。
可用其它特定形式实施本发明而不偏离其精神或主要特征。应在所有方面认为所描述的实施例是示例性而非限制性的。因此,本发明的范围是由所附权利要求而不是上文的描述指明的。进入权利要求的等效的意义与范围内的所有改变都在它们的范围之内。