能防止移位差错的汉字机内码的制作方法

文档序号:93327阅读:366来源:国知局
专利名称:能防止移位差错的汉字机内码的制作方法
在国标2312-80中定义的汉字代码均由两个七位的字节所组成。为使汉字代码在计算机内能与英文相区别,近年来,广泛采用了在国标码的各个字节上增加一个1作为第八位的办法。这样做已被公认为有许多优点码长短,与英文完全不混淆,而且对汉字字串进行连结、分解或查找时,如同对英文一样方便。然而,在实践中也出现了一些问题。例如,“春眠不觉好”,其中“好”显系“晓”之误,但用行编辑的命令要把“好”字(其代码为C)改正,却一定反而把“春眠”两字(代码为4C_)改错,而“好”字仍照旧。又如,要用行编辑命令把“交换”(代码为=;;;)中的“换”改成“还”,也一定被错改为“交够”(=;9;)。这些是在行编辑中出现的问题,实际在屏幕编辑中也会出如下的问题“有1个……”,其中“1”只占一个字节,如果要把它改成“一”,就会把“个”的前一字节冲掉,影响所及却不只是一个“个”字,而是所有后随的汉字都面目皆非了。
所有这些问题之所以产生,都源出于同一个原因国标码的任一码字(Codeword)的后一字节与任何后随码字的前一字节相连都可以成为另一合法的码字,因此只要增删的字节数不是偶数,或者查找指针的后移量不是偶数(通常使用的英文程序都是按字节逐一后移),就必定会发生差错。
在某些重要的(例如军事的)查询、检索工作中,即使是很微小的移位差错发生率,也是不允许的。
要彻底避免发生移位差错。有一个办法是完全重新编写适合于汉字国标码的计算机程序。例如IBM 5550机中所用的编辑程序,是专为其特殊的机内码(不同于国标码或JIS)编写的。用该机自备的编辑程序,可以部分避免上述问题;然而使用从其他机型移植到该机去的软件,却不一定都能避免。就国内引进各种机型的软件的复杂情况而言,普遍小作修改已不可能,全部改写将不可想像。
因此我们将考虑另一条途径,就是使用一种不会发生移位差错的汉字代码,简称防移码(Shift-proof Code)。例如在最高位均为1的国标码码字之前一律加一个最高位为1的~或}(即FEH或FDH),每个汉字均用三个字节,就可完全避免移位差错。但是,这将使系统资源的利用率显著降低,不论在屏幕上显示,或在内存缓冲中处理,每行的实际汉字数显著变少,所以没有人愿意采用这办法。
有人提议,让国标码的第一字节最高位为1,第二字节最高位为0,也可完全避免移位差错。但这样会造成中英文的混淆,例如要用行编辑命令修改某一英文字符或数字,就有可能错把某一无辜汉字改成了另一字。
于是有人设想,把所有允许使用的最高位为1的位组(bit Combinations)分为两半,一半只用于码字的前一字节,另一半则只用于后一字节。这样也能可靠地避免移位差错,也不可能与英文混淆,但可以组成的码字总数未免不够。设可用的高位为1的位组总数为128,则可以组成的码字总数只有64×64=4096个,如可用的位组数为96,则码字总数只48×48=2304个。
下面所述的办法是前人从未设想,也从未有人提出过的把全部可用的位组等分(或尽可能接近地等分)为三,其中一部分称之为H(Head),只用于码字之首;另一部分称之为T(Tail),只用于码字之尾;剩下的则称为I(Intermediary),即可用于首也可用于尾。只有HI、HT、IT三种组合被认为是合法的码字。可以用数字方法证明只有把全部码元(即上述位组)等分为三,而且只使用上述三种组合时,方可在不发生移位差错的前提下得到最大的码字总数。(详细证明另作学术性论文发表)。因此当可用位组数为128时,可得二字节的防移码字5461个;如可用位组仅96个,则可得码字3072个。
上述码字数仍不足于覆盖GB2312的二级字,因此扩充措施总是必需的。但与前面把全部位组等分为二相比,在等分为三的基础上进行扩充要有利的多。扩充的办法就是在使用两字节码字的同时使用三字节码字。设可用位组数为128。如只用40个位组做H,40个做I,40个做T,则还剩8个位组,统称为X,用于扩充。全部双字节的码字总数可有4800个。三字节的码字则可使用下述五种组合XII,XTI,XTT,HHX,IHX,都不会导致移位差错。但考虑到排序的便利,最好只使用前三种组合。因此全部三字节的码字总数可有8×4800=38400个,加上双字节码字,总共43200个。这已可包括几乎所有的从古到今的汉字。
显然应该用两字节的码字优先代表较常用的字。按照此前的统计,4800个常用字的总使用率为99.98%,所以这种不等长码的平均码长为2.0002字节,换言之,实际是每一万个字中只有两个字是三字节的。这对于系统资源利用率的影响可说完全可忽略不计,在显示屏幕上,将是极偶然地在冷僻字之后出现一个空格(只当屏幕编辑时),在内存缓冲中也只偶然需多占一个字节,这是一般都能接受的。
实际上,即使是国标,也不保证所有汉字都是两字节。如果某一系统(例如图书馆管理系统)的实际用字数超过了8000,则在8000以外的字就得使用扩充汉字集。因为扩充集的码字与基本集完全相同,所以必需另加调用或指明扩充集的控制符(串),加上码字本身,可能还不止是三字节。然而采用上述不等长的防移码,只需一个字符集就解决全部从古到今的汉字,同时还从根本上保证了在任何条件下都不会发生移位差错。
上述采用128个位组的办法适用于普通的IBM-PC,以及一些原为七位机但经修改后(即只取消了原来对最高位的屏蔽)成了八位的计算机。但是,有一些原为八位的计算机,例如VAX-11,对于高位为1的128个位组的前32个(即80H-9FH)却是特别对待的。在存储、传输、查找这些位组时虽与其他可打印字符一样,但在编辑时却认为这32个字符不占据屏幕或打印的列位置,亦即当作了控制符。(因为在ISO中已把这32个位组定为控制符,但也同时规定了这32个控制符的代用式。几乎所有的计算机在实际中都只使用7位的代用式)。在这样的情况下,如不能修改其编辑程序,就只得采用96位组的防移码,这96个位组(AOH-FFH),可以全部用作H、I和T来组成双字节的码字(共3072个)。扩充用的X则可从前32个位组中去挑选。既然那些位组被当作控制符,则在屏幕编辑时,正恰好可以不必多显示一个空格。3072个常用字的使用率为99.6%,
平均码长2.004字节。这仍然是有一定实用价值的。
本单位研制的设备中,已经实现了上述方法。
权利要求
本申请所述的防移码,将首先应用于计算机产品内部,用以可靠地防止在汉字处理过程中发生移位差错,它的主要特征是常用的基本汉字用双字节的码字来一一代表。用以组成码字的位组有三类;一类只用于码字之首,一类只用于码字之尾,第三类则用于首尾皆可,但同一码字的首尾不同时为第三类。非常用的汉字则使用三字节的码字。请求对具有上述特征的汉字代码在计算机产品内或通讯领域内的使用给予保护。
专利摘要
近年来广泛采用最高位为1的国际码(GB2312)作为汉字机内码。由于任一码字的后一字节与后随码字的前一字节相连也是一个合法的码字,偶或在编辑修改或查找检索过程中会出现差错,这一差错的避免已被认为是当前的一个难题。采用此处所述的防移码,就可以从根本上完全避免所述差错,而在计算机系统的内外存利用率、(行或页的)缓冲利用率、屏幕显示密度等方面,与两字节的国标码相比,却相差极微。
文档编号G06F11/10GK85105910SQ85105910
公开日1986年1月10日 申请日期1985年8月7日
发明者董亦农, 钱文浩 申请人:中国软件技术公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1