本发明涉及一种能使西文计算机系统不修改任何软件直接处理汉字信息的汉字内码设置和解决中西文内码冲突的方法,特别涉及一种能分开不同汉字字体的汉字内码设置方法。 用计算机处理汉字信息,必须对汉字编码。国家标准汉字信息交换码GB2312-80是使用ASCⅡ字符集中的可见字符码位(码值为21H-7EH)设置汉字编码的,每两个可见字符码位表示一个汉字。在不处理单字节ASCⅡ字符信息情况下,针对GB2312-80码设计计算机软件,再配以针对GB2312-80的汉字终端设备就可构成汉字信息处理系统。这种情况只适用于某些专用的汉字信息处理系统(例如,汉字排版系统)。
然而,在大多数场合下,要求计算机系统既要能处理单字节的西文字符信息,又要能处理多字节的汉字信息,还要能正确区分和处理二者混合的信息,并要求凡是单字节的西文字符串在西文系统中能充当的角色,汉字或汉字串也能充当;还希望尽可能不修改西文计算机系统的软件就能实现上述的中西文兼容要求。
为此,人们提出了许多种汉字内码方案。现有汉字内码设置技术,按其与单字节西文字符编码的区分方法分类,有如下几类:1.括号法(包括SO/SI法),2.引导符法,3.标志位法(又称高位置1法),4.字母数字法,其中,括号法、引导符法、标志位法都必须修改西文软件才能使西文计算机系统做到中西文兼容。有些中西文兼容功能,即使修改软件也不能完全达到。
现有字母数字法的种类较多,其中具有代表性的为“A9A”,此法用<西文大写字母><阿拉伯数字><西文大写字母>的组合设置汉字内码,它们基本上能做到不经修改西文软件使西文计算机系统达到中西文兼容的要求,但仍存在不少缺陷。以“A9A”法为例,存在如下问题:
1.有些西文字符串可能误解释为汉字,即西文字符串与汉字内码发生冲突。这种冲突虽然不影响系统和软件的运行,但妨碍对输出内容地理解。
2.在只允许使用小写字母的软件中,不能使用汉字。
3.在只允许使用字母的场合,不能使用汉字。
4.会发生移位错误。
5.码位少,只有6760个,不能满足许多应用的需要。
专利申请CN85100956给出了解决“A9A”码与西文字符串冲突的办法,但也只能解决用户自己输入的西文字符串与“A9A”码的冲突,它不能解决西文系统中原有的西文字符串与“A9A”码的冲突,人们往往更需要解决后面这种冲突。此外,采用添加空格和短线解决冲突,在程序设计语言、命令语言、数据库等应用中,有可能破坏某些对象的定义而造成错误。例如,下面两个FORTRAN语句:
H5V=1.7321
SS导弹=1000
若用专利申请CN85100956提供的方法便会自动变成:
H5-V=1.7321
SS导弹=1000
这时,H5-V不是正确的FORTRAN变量名,第二个语句语法错误。
专利申请CN85105910提出一种防移码,是以标志位法为基础的,它不能解决中西文兼容的问题。
还需要指出的是,现有各种汉字内码设置技术都是不分字体的,它们要使用特殊的版式命令才能满足多种字体处理汉字信息的需求。
本发明的目的在于针对现有技术的缺陷,提出一种选用多种西文字符组合、具有非对称排序结构、能够分开不同汉字字体的汉字内码设置技术,并且为汉字内码与西文字符串之间的冲突设置控制措施,以此实现不修改西文计算机系统的任何软件直接用西文软件处理汉字信息。
本发明用西文大写字母(以下简写为<大>)、西文小写字母(以下简写为<小>)、阿拉伯数字(以下简写为<数>)三种字符中的两种构成多种三字符的非对称组合,并对这些组合按照下述条件筛选:
1.组合不出现在西文词汇中。
2.组合中有两个字符属于同一种字符,它们必须紧挨,以保证排序的结构。
3.每个组合都以字母开头。
从而选出<小><小><大>、<小><大><大>、<小><小><数>、<大><大><数>四种组合,用它们分别为宋体、仿宋体、楷体、黑体汉字设置汉字内码。并且为同一汉字设置不同字体内码时,前两种组合的第一个字母为相同的小写字母,第二个字母是对应的大小写字母,第三个字母是相同的大写字母,后两种组合的第一个字符是对应的大小写字母,第二个字符也是对应的大小写字母,第三个字符是相同的阿拉伯数字。
对上述设置的汉字内码与用户输入或西文系统中原有西文字符串之间的冲突,本发明采取了下列三项控制措施。
第一项措施为,通过主机命令或输出设备上的手动装置选择汉字内码在输出设备上的三种输出方式之一,即:
1.所有字体都用汉字形式输出。
2.某些字体以汉字形式输出,其他字体按内码以西文字符串形式输出。
3.所有字体都按内码以西文字符串形式输出。
第二项措施为,对字符设置“不按汉字形式输出”属性,一个字符设置了“不按汉字形式输出”属性后,不论其是否为一个汉字内码的成员,都以西文字符形式输出,且不再与其他西文字符组合成按汉字形式输出的汉字内码。设置“不按汉字形式输出”属性,通过如下两个途径:
1.通过主机命令将某范围内包括汉字内码在内的所有字符都置为“不按汉字形式输出”属性。
2.通过输出设备上的手动交互设备,指定即将输出的汉字的汉字内码的第一个字母具有“不按汉字形式输出”属性。
第三项措施为强制输入确认,在西文小写字母后,紧接着放置内码为<小><大><大>或<大><大><数>的汉字,输入设备则在西文小写字母和该汉字内码之间加一空格显示出来,并发出音响让输入者确认,输入者可打一键确认空格,或把空格改成除了字母以外的其他字符;在西文输入态,若输入的西文字符与其相邻字符构成汉字内码组合,输入设备则在该字符前加一空格显示出来并发出音响让输入者确认,输入者可打一键确认空格,或把空格改成除了字母以外的其他字符,或把空格删掉;在要求输入者确认的情况下,若输入者不于响应,则输入设备不再接受输入者的其他输入并发出音响;用户可通过输入设备上的开关,开通或切断上面描述的强制输入确认功能。
本发明汉字内码设置方法和现有汉字内码设置技术相比较,它不仅保留了现有字母数字法汉字内码的所有优点,而且还显示出如下积极效果:
1.增加汉字内码的码位,并满足了不同字体汉字处理汉字信息的需求。对于大小写字母和数字都能接受的西文计算机系统和西文软件,可混合使用单字节西文字符和四种字体汉字,其中,用<小><小><大>和<小><大><大>设置两种常用字体的内码,每种码位可达17576个,足够为汉字基本集和一个辅助集设置内码,为使用更多的汉字提供了扩展的灵活性;用<小><小><数>和<大><大><数>为两种不常用的字体设置内码,每种码位可达6760个,虽然码位不多,但考虑到字体不是常用的,一般情况下不会使用更多的汉字,四种字体的使用,增加信息处理的效果。
2.适应受限制场合下的应用。对于只接受大写字母和数字的场合,可选用<大><大><数>组合对应的汉字字体,对于只接受小写字母和数字的场合,可选用<小><小><数>组合对应的汉字字体,对于只接受大小写字母的场合,可使用<小><小><大>和<小><大><大>两种组合对应的汉字字体。
对于把大写字母强制变成小写字母,或把小写字母强制变成大写字母的计算机系统或西文软件,可使用<大><大><数>、<小><小><数>两种组合对应的汉字字体,强制转变时汉字字体发生变化,汉字本身不变。
3.本发明的汉字内码,把汉字和西文字母数字串等价起来,甚至把汉字和西文字母串等价起来,比现有字母数字法汉字内码有了更好的中西文兼容性。凡是字母数字串甚至字母串可充当的角色,例如,字符串常量、变量名、标号、标识符、字段名、文件名、数据库名、注释、正文等都可以用汉字充当,而不需要修改西文系统上的任何软件。
4.本发明方法设置的汉字内码具有非对称排序结构,能有效地防止移位错误。
5.本发明方法设置的汉字内码与西文词汇中的字符组合不发生冲突,保证其在一般情况下有效地使用,但它可能与西文商标、西文标牌、西文邮政编码等发生冲突,也可能与程序员定义的字符串、标识符发生冲突。然而无论是用户输入的还是西文系统原有的西文字符串,如果与汉字内码发生冲突,通过选择输出方式、设置“不按汉字形式输出”属性和强制输入确认三项措施,输出时都能得到用户期望的效果。
本发明的一项实施实例为:
用<小><小><大>组合设置宋体汉字内码,用<小><大><大>组合设置仿宋体汉字内码,用<小><小><数>组合设置黑体汉字内码用<大><大><数>组合设置楷体汉字内码。
四种字体汉字内码与GB2312-80汉字国标交换码的关系为
1.宋体:
94*(区号-1)+位号=(宋体内码第一字节-97)+(宋体内码第二字节-97)*26+(宋体内码第三字节-65)*26*26
2.仿宋体:
94*(区号-1)+位号=(仿宋体内码第一字节-97)+(仿宋体内码第二字节-65)*26+(仿宋体内码第三字节-65)*26*26
3.黑体,只设置16区以后的汉字内码:
94*(区号-1)+位号=(黑体内码第一字节-97)+(黑体内码第二字节-97)*26+(黑体内码第三字节-48)*26*26+1410
4.楷体,只设置16区以后的汉字内码:
94*(区号-1)+位号=(楷体内码第一字节-65)+(楷体内码第二字节-65)*26+(楷体内码第三字节-48)*26*26+1410
设置的输出方式选择键为:control-F1所有汉字字体都用汉字形式输出,control-F2所有汉字字体都不以汉字形式输出,control-F3开始选择汉字形式输出的字体:control-F3A,宋体以汉字形式输出;control-F3B,仿宋体以汉字形式输出;control-F3C,黑体以汉字形式输出;control-F3D,楷体以汉字形式输出。
用shift-F1进入设置“不按汉字形式输出”属性状态,用光标键使光标在屏幕上移动,用d键使光标移动到下一个汉字内码组合的第一个字符处,用u键使光标移动到上一个汉字内码组合的第一个字符处,用y和n键分别设置和清除光标所在字符的“不按汉字形式输出”属性,用shift-F2退出设置“不按汉字形式输出”属性。
用shift-F3开通强制输入确认,用shift-F4切断输入确认,SP键为确认空格,<字符>为用<字符>代替空格,BS键为删掉空格。