一种提高英文编码效率的编码方法*
2016-04-13郭连骐
郭连骐
(哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001)
一种提高英文编码效率的编码方法*
郭连骐
(哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001)
摘要:目前世界上广泛应用的文字信息交换码的体系有两个:ANSI码和Unicode码。提高文字的编码效率,会在通信中产生巨大的经济效益。郭码是一个新的文字信息交换码的编码体系,其核算单位、数据结构、编码方法都是独创的。郭码对不同国家/民族的文字都有其独立的编码,并且字符编码效率都高于Unicode码,其中部分高于ANSI码。它根据文字的应用规律以及不同种类文字的特点创造出了多种链式编码,其中“第二类符链”的英文字符编码效率比ANSI码提高了大约30%。
关键词:郭码;文字信息交换码;英文编码;ANSI码
0引言
ASCII字符包括基本拉丁字母(英文字母)、阿拉伯数字、符号、控制符。ANSI码中ASCII字符的码长是一个字节(二进制的8位),这个码值是唯一的、固定不变的。在郭码中,一种字符的编码可以有多种“表示方式”[1]。郭码使用独创的单位“组元”(二进制的12位),2组元的容量是2字节容量(65536)的256倍,可以包容世界各国文字的编码。所有文字都有2组元编码,称为“基本表示方式”。一些常用汉字和全部ASCII字符还有单组元编码,称为“缺省表示方式”。某种文字连续出现多个时,可以构成“链”,对其采取特定的编码方法,形成该种文字编码的“某某链表示方式”,它利用“规模效应”提升了文字的编码效率[2]。郭码中各种文字的编码效率都优于Unicode码。
1ANSI码的应用
ANSI码中,全部的ASCII字符实际上只占用了一个字节的前半区,即0到127,后半区(128到255)空置。
理论上,ASCII字符也可以使用二进制的7位编码,因为7位的容量是128。7位编码的优点是效率较高,但是,信息传输、存储的基本单位是字节,生成文件时,各个字符的7位编码要头尾相接、连续不断地放入8位的字节中,要“塞满”字节的每一位。从字节的角度看,它的全部容量(256)都被占用了。在以字节为单位的文件中,既然全部容量已被占用,也就没有了其它文字编码的可能,7位编码的模式只能被ASCII字符独家使用,这就使得它很“孤独”。文字是人们相互交流的工具,一种文字编码模式不能顾及其它文字的应用,该种模式的使用范围也就受到极大的限制。
现实的ANSI码中ASCII字符是8位编码,编码效率要低于7位编码。但另一方面,空置的后半区也为其它文字的编码留下空间,法文、俄文、希腊文等拼音文字可以分别利用字节后半区编码,汉字、韩文、日文等字符数量很多的文字也可以利用这空置的后半区形成2字节编码以及4字节编码,它们可以分别与ASCII字符兼容(不能同时兼容)。如此一来,ANSI码也就得到了广泛的应用,英文在世界上的地位也得到了提升。我国现在执行的国家标准GB18030—2000与ANSI码兼容,也属于ANSI码体系。
在以字节为单位的、编码模式不改变的情况下,ASCII字符的编码效率无法再提高。
2郭码的第二类符链
以前的郭码文章中“符链”的应用,使得ASCII字符的平均码长优于“缺省表示方式”的单组元(12位),趋近于ANSI码的8位。
现在世界上使用英文的人口最多,为进一步提高ASCII字符的编码效率,本文推出郭码的“第二类符链”。为避免混淆,称以前郭码的“符链”为“第一类符链”。
第二类符链仍然由3部分组成,链头4013(FAD),链体,链尾4002(FA2)。链头、链尾各占一个组元,链体元素的单位是“半组元”。
“半组元”是新设立的单位,其“长度”是组元的一半,即二进制的6位,其能表示的数是从0到63,其容量为64,是组元容量的64分之一,是字节容量的四分之一。
第二类符链与第一类符链的关键区别,就是它的链体的元素不是字节(8位),而是“半组元”(6位)。
设置两个数组,它们的大小均与“半组元”的容量相同,第一个为“基本数组”,第二个为“辅助数组”。将ASCII字符全部放到这两个数组中,重新编码。使用频度高的字符放入“基本数组”,使用频度低的放入“辅助数组”,它们新的码长是二进制的6位。
基本数组中的字符有10个阿拉伯数字、基本拉丁字母大小写44个(去除JjQqXxZz)、符号“空格”“,”“.”“-”“"”“ '”(ANSI码的20、2C、2E、2D、22、27)、控制符0D、控制符0A,它们的编码是从0到61。其余字符(包括JjQqXxZz)放入辅助数组,编码也是从0到61。
两个数组中的码值“62”、“63”有特殊用途。在链体中出现基本数组的字符时,直接用它的6位码值;出现辅助数组的字符时,要在其码值前面加上“63”(二进制的“111111”),它的作用是表示其后面的6位码值是辅助数组的。实际上,在第二类符链中,基本数组中字符是6位编码,辅助数组中的字符是12位编码。
以前的郭码文章中,表示例句的各种编码都使用16进制数。1位16进制数字可以等效代替二进制的4位数字,2位16进制数字可以表示1个字节,3位16进制数字可以表示1个组元。
半组元是二进制的6位,用16进制数字无法表示。为此,引入“4进制数字”,1位4进制数字可以等效代替2位二进制的数字,2位4进制数字可以对应1位16进制的数字。例如,与16进制数字“1、6、9、C”对应的4进制数字是“01、12、21、30”。
半组元可以用3位4进制数字表示,如“63”(10进制)可用4进制数字“333”表示。组元可以用6位4进制数字表示。
3第二类符链的生成
由于第二类符链中ASCII字符的数量是不确定的,其中有多少个“辅助数组”的字符也不确定,为保证第二类符链的总长度是整数个组元,就要考虑链内补码问题。因为链体的元素是半组元,链体内半组元的总数是偶数时,恰好是整数个组元,不需要补码;半组元总数是奇数时,需补码1个“半组元”,其值为“62”(4进制的“332”)。
链尾“FA2”是一个组元,它的4进制表示是“33 22 02”。若将一个组元分成前后两个“半组元”来看,“前半个组元”是“332”,“后半个组元”是“202”。因为“62”(4进制的“332”)不作为字符编码使用,链体内的编码中不可能出现“332”,故链体编码不影响对链尾的搜索。
再者,若链体内编码的半组元从前往后排序(1、2、3…),序号为奇数的是“前半个组元”,序号为偶数的是“后半个组元”。“332”只有出现在“前半个组元”时才可能影响对链尾的搜索。当链体内半组元总数为奇数时,最后一个“半组元”肯定是“前半个组元”,“332”补在“后半个组元”中,补码也不会影响郭码文件中对链尾的搜索。
郭码中,ASCII字符“缺省表示方式”的编码,每个字符码长固定是1个组元(12位)。当连续的ASCII字符达到5个时,它们的编码总共是60位。若生成第二类符链,5个“半组元”为30位(按全部为基本数组的字符考虑),补码1个“半组元”为6位,链头、链尾共24位,符链总长度也是60位,二者编码长度相同。
连续的ASCII字符达到6个时,“缺省表示方式”编码是6个组元,共72位。若生成第二类符链,6个“半组元”为36位(按全部为基本数组的字符考虑),不需要补码,链头、链尾共24位,符链总长度是60位,少于“缺省表示方式”的72位。所以,连续6个ASCII字符就是生成第二类符链的起始标准,少于6个时不生成链,按“缺省表示方式”编码。成链后的ASCII字符编码就是“第二类符链表示方式”。
第二类符链中ASCII字符的平均码长由第二类符链的总长度(以“位”为单位)除以所含ASCII字符的数量得来。符链总长度包括链头、链体内的字符编码、链内补码、链尾,如果此链构成一个独立文件,还要包括文件补码。
继续测算,连续的ASCII字符达到16个时(按全部为基本数组的字符考虑),第二类符链的总长度是120位,一个字符的平均码长是7.5位,少于ANSI码的8位。所以,当连续的ASCII字符数达到或超过16个时,郭码第二类符链的编码效率就优于ANSI码,而且,连续的ASCII字符数量越多,此一优势越显著。
4举例说明
例一,短文『小二黑给小芹发了条短信“I love you”,小芹收到了但是没看懂,因为她没学过英文。』
它的ANSI码文件是80个字节(略)。
郭码“缺省表示方式”和“(第一类)符链表示方式”编码是68个字节(略)。
郭码“缺省表示方式”和“第二类符链表示方式”编码是65个字节(16进制):
C4 13 12 46 63 C8 C4 19 2D 31 46 E9 B1 D2 E0 C6 5F 37 FA D4 C0 AE ED 25 03 6B B3 FA 2F 38 F4 7C 41 92 DA 41 27 36 E9 26 1A 33 79 56 16 2C 2F 47 D4 EB 8E AC 77 95 CA 54 2B D5 CB A8 F2 E0 0E 00 B0
后二者对短文汉字部分“缺省表示方式”的编码完全相同,差别仅在英文部分,以下仅关注英文部分第二类符链的编码(第19个到第29个字节,符链实际使用10.5个字节)。
……FA D4 C0 AE ED 25 03 6B B3 FA 2F……(16进制)
改为4进制表示:
……3322 3110 3000 2232 3231 0211 0003 1223 2303 3322 0233……
该段编码解释如下:
3322 31第二类符链的链头 103 I 000 空格 223 l 232 o 310 v 211 e000 空格 312 y232 o303 u3322 02 链尾33(汉字标点符号编码的一部分)
该句英文,第二类符链编码的链体是10个“半组元”(字符全部是基本数组的),就是5个组元,加上链头、链尾,全链共7个组元,即10.5个字节。本例中ASCII字符的平均码长为8.4位。
例二,短文『He said: "That's one small step for a men, one giant leap for mankind."』
ANSI码编码73个字节(16进制):
48 65 20 73 61 69 64 3A 20 22 54 68 61 74 27 73 20 6F 6E 65 20 73 6D 61 6C 6C 20 73 74 65 70 20 66 6F 72 20 61 20 6D 65 6E 2C 20 6F 6E 65 20 67 69 61 6E 74 20 6C 65 61 70 20 66 6F 72 20 6D 61 6E 6B 69 6E 64 2E 22 0D 0A
郭码的第二类符链编码59个字节(16进制):
FA D4 A5 03 18 69 93 F2 80 E9 CA 21 CB DC 40 BA D9 40 C6 C8 6B AC 0C 72 96 F0 26 BB 00 21 02 C9 6D DC 0B AD 94 09 E9 86 DC 80 AE 58 6F 02 6B B0 02 C8 6D AA 9B 64 E3 AE FC FA 20
郭码的第二类符链编码(4进制):
3322 3110 2211 0003 0120 1221 2103 3302 2000 3221 3022 0201 3023 3130 1000 2322 3121 1000 3012 3020 1223 2230 0030 1302 2112 3300 0212 2323 0000 0201 0002 3021 1231 3130 0023 2231 2110 0021 3221 2012 3130 2000 2232 1120 1233 0002 1223 2300 0002 3020 1231 2222 2123 1210 3203 2232 3330 3322 0200
编码解释如下:
3322 31链头102 H 211 e 000 空格 301 s 201 a 221 i 210 d 333 022 : 000 空格322 " 130T 220 h 201a 302 t 331 ' 301s 000 空格232 o 231 n 211 e000空格 301 s230 m 201 a 223 l 223 l 000 空格301 s 302 t 211 e233 p 000 空格212 f 232 o 300 r 000 空格201 a 000 空格 230 m 211 e 231 n 313 , 000 空格232 o 231 n 211 e 000 空格213 g 221 i 201 a 231 n 302 t 000 空格223 l211 e 201 a 233 p 000 空格 212 f 232 o 300 r 000 空格230 m 201a 231 n 222 k 221 i 231 n 210 d 320.322 "323 (控制符oD) 330(控制符0A)3322 02 链尾00 文件补码4位
全文有ASCII字符73个,只有1个字符(冒号“:”)属于辅助数组,其编码“333 022”为2个“半组元”。其余字符都属于基本数组,码长为1个“半组元”。
链体内有“半组元”共74个,为偶数,不需要链内补码。链体含37个组元,再加上链头、链尾共39个组元,为奇数,需要文件补码4位。全文长59个字节。
应用第二类符链编码使得本例中一个ASCII字符的平均码长为6.465 8位,编码效率比ANSI码提高23.73%。
例三,一篇著名的宣言
『THE DECLARATION OF INDEPENDENCE
July 4, 1776
In Congress, July 4, 1776,
THE UNANIMOUS DECLARATION OF THE THIRTEEN UNITED STATES OF AMERICA
……
New Jersey: RICHARD STOCKTON, JOHN WITHERSPOON, FRANCIS HOPKINS, JOHN HART, ABRAHAM CLARK 』
ANSI码文件长9655个字节(略)。
郭码第二类符链编码文件长7313个字节,以下仅列出文件最前面的36个字节和最后面的36个字节(16进制):
FA D0 00 71 23 C0 38 F3 55 2D A2 DC 4D 85 C0 61 00 13 5C E3 D9 3D 73 8F 5C D3 FB F0 00 3F 07 3A F6 00 4D C0 ……1A 2D 73 53 6C 04 98 65 44 D7 6F 70 3F 05 84 97 03 BF 12 2D A7 37 00 B3 1A 2D 22 D6 00 D5 4B 69 40 3E FA 20
以下仅列出最后14个字节的4进制表示:
0000 2303 0122 0231 0202 3112 0000 3111 1023 1221 1000 0332 3322 0200
编码解释如下:
000 空格023A 030 B 122 R 023 A 102 H 023 A 112 M 000 空格031 C 111 L 023 A 122R110 K 000空格 332 链内补码(十进制的62) 3322 02 链尾 00文件补码4位
9 655个字符中,“辅助数组”的有90个。链体内字符编码有9 745个“半组元”,为奇数,“链内补码”1个“半组元”(值为4进制的332),链体共有9 746个“半组元”,就是4 873个组元。再加上链头、链尾2个组元,第二类符链总共4 875个组元,为奇数,故在最后“文件补码”4位。文件长7 313个字节,比ANSI码文件节省了2 342个字节。
该宣言郭码第二类符链编码,ASCII字符平均码长为6.059 5位,编码效率比ANSI码提高了32.03%。
本例中,辅助数组中字符使用频度为0.9322%,不足百分之一。换言之,基本数组的字符使用频度达99%以上。经过对数万字符的英文资料测试,辅助数组中字符使用频度一般不超过百分之一。
做一简单估算,假设辅助数组中字符使用频度为百分之一,连续的ASCII字符数量达到200个以上,第二类符链编码效率就会比ANSI码提高约30%。
郭码中ASCII字符的编码可以有4种“表示方式”,它的平均码长分别是“基本表示方式”的24位,“缺省表示方式”的12位,“第一类符链表示方式”的接近8位,“第二类符链表示方式”的接近6位。“基本表示方式”一般不使用,“第一类符链表示方式”因为性能劣于“第二类符链表示方式”,也将舍去。
现在使用的文字处理软件是基于国家标准GB18030—2000的,它“看不懂”使用郭码生成的文字文件。为了检验郭码的正确性,编写了工具软件A和工具软件B。软件A可以把ANSI码文字文件(纯文本)W1转译为郭码文件W2,工具软件B可以把郭码文件W2转译为ANSI码文件W3。文件W3与W1完全相同,就说明郭码文件W2与ANSI码文件W1承载着相同的文字信息。以上例句中的郭码文件数据就是由软件A得来的。
5结语
连续的ASCII字符少于6个时不生成第二类符链,按“缺省表示方式”编码,字符的码长是12位,劣于ANSI码的8位,但这是小概率事件。连续的ASCII字符达到或超过6个时就生成第二类符链,随着字符数量的增加,字符的平均码长就趋近于6位,这是大概率事件。郭码并非任何情况下ASCII字符编码效率都优于ANSI码,而是有时“赔”有时“赚”,只是“赔”的少、“赚”的多,综合考虑,它就优于ANSI码。字符编码效率的提高将能够带来可观的经济效益。
参考文献:
[1]郭连骐.郭码是一种新型的文字信息交换码[EB/OL].新浪网陶沙的博客,(2015-09-10) [2015-10-10],http://blog.sina.com.cn/taosha9801.
GUO Lian-qi. Guo-Code is a Kind of New Writing Information Exchanges Code[EB/OL].Sina net Taosha blog.(2015-09-10)[2015-10-10].http://blog.sina.com.cn/taosha9801.
[2]郭连骐.郭码的改进型[EB/OL]. 新浪网陶沙的博客.(2013-04-06)[2015-10-10].http://blog.sina.com.cn/taosha9801.
GUO Lian-qi. The Improvement Type of the Guo-Code[EB/OL]. Sina net Taosha blog.(2013-04-06)[2015-10-10],http://blog.sina.com.cn/taosha9801.
郭连骐(1945—),男,教授,主要研究方向为文字信息交换码。
A Coding Method for Improving English Coding Efficiency
GUO Lian-qi
(College of Information and Communication Engineering,Harbin Engineering University,Harbin Heilongjiang 150001,China)
Abstract:Nowadays, there are two widely-applied information exchanges coding systems all over the world, that is ANSI (American National Standards Institute) and Unicode (Universal Multiple- Octet Coded Character Set). It is obvious that to raise the coding efficiency of writing information would result in huge economic benefit in the communication field. Guo-code is a new coding system for information exchanges, in which the checking unit, data structure and coding method are all originally created. For different writing characters of different countries / nations, Guo-code uses different self-governed coding method, and its coding efficiency is clearly higher than that of Unicode coding system,and for some application even higher than that of ANSI. Guo-code creates a manifold “chain type coding method” in accordance with the different application rules and characteristics of various characters. This paper focuses on the coding method for English writing characters listed in the “second sign chain”. Experiment indicates that the efficiency with Guo-code method is higher about 30% than with ANSI coding method.
Key words:Guo-code; writing-information exchange code; English coding method; ANSI code
作者简介:
中图分类号:TN911.21
文献标志码:A
文章编号:1002-0802(2016)01-0007-05
*收稿日期:2015-08-02;修回日期:2015-11-20Received date:2015-08-02;Revised date:2015-11-20
doi:10.3969/j.issn.1002-0802.2016.01.002