国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一個(gè)新型的文字編碼平臺(tái)*

2020-12-23 06:11郭連騏
通信技術(shù) 2020年10期
關(guān)鍵詞:字符字節(jié)編碼

郭連騏

(哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001)

0 引言

幾千年來,人類記錄歷史、傳遞信息的主要工具是文字。計(jì)算機(jī)中、數(shù)字通信中的文字需要編碼——文字信息交換碼。文字編碼效率越高,生成的文字文件就越短,存儲(chǔ)時(shí)更省空間,傳輸時(shí)更省時(shí)間,經(jīng)濟(jì)效益也就越高。所以,人們研究文字編碼追求的最主要的目標(biāo)是提高編碼效率。目前,世界上廣泛使用的文字編碼是ANSI 碼和Unicode 碼。美國人發(fā)明了數(shù)字電子計(jì)算機(jī),不但要用于科學(xué)計(jì)算,還要用于文字信息處理。他們的母語是英語,就為英文字母(基本拉丁字母)及符號(hào)(包括阿拉伯?dāng)?shù)字、標(biāo)點(diǎn)符號(hào)等)設(shè)計(jì)了一套信息交換碼作為美國的國家標(biāo)準(zhǔn),American National Standards Institute,簡稱ANSI 碼。這些字符又稱為ASCII 字符(American Standard Code for Information Interchange )。

英文字母及符號(hào)占用1 個(gè)字節(jié)的前半段(0 至127)編碼,每個(gè)字符的碼長是1 個(gè)字節(jié)。

其他國家制定本國的文字編碼標(biāo)準(zhǔn)時(shí)也都與ANSI 碼兼容,即保留英文字符原有編碼數(shù)值不變。俄文、希臘文等字符較少的拼音文字,使用字節(jié)的后半段(128 至255)編碼,字符碼長也是1 個(gè)字節(jié)。中國漢字、日文等字符數(shù)量較多的文字需要2 個(gè)(或更多)字節(jié)編碼,其第一個(gè)字節(jié)也只能使用字節(jié)后半段(128 至255)編碼。如此生成的多國文字編碼標(biāo)準(zhǔn)組成了龐大的ANSI 碼體系,我國的文字編碼國家標(biāo)準(zhǔn)GB18030—2000[1]就屬于此體系。本文中“ANSI 碼”一般泛指ANSI 碼體系。

由于俄文、希臘文、漢文、日文等許多種文字都使用相同的空間(首字節(jié)的后半段)編碼,所以這些文字編碼標(biāo)準(zhǔn)是不可以同時(shí)使用的,即這些文字編碼是不獨(dú)立的。這是ANSI 碼體系與生俱來的缺陷,給用戶帶來不便。

為了多種文字編碼可以同時(shí)使用,國際標(biāo)準(zhǔn)化組織推出了國際標(biāo)準(zhǔn)——“通用多八位編碼字符集”(Universal Multiple-Octet Coded Character Set),簡稱Unicode 碼。

該碼中各種文字都有各自的編碼空間,所以它們都是獨(dú)立的。國際上使用比較多的文字,如英文、俄文、漢文(比較常用的漢字)、韓文、日文等的編碼在“基本平面”內(nèi),每個(gè)字符的碼長都是2 個(gè)字節(jié)(區(qū)號(hào)、位號(hào))。使用頻度很低的文字(包括中國數(shù)萬極少使用的漢字)碼長是4 個(gè)字節(jié)(組號(hào)、面號(hào)、區(qū)號(hào)、位號(hào))。

英文、俄文、希臘文等許多拼音文字在ANSI碼體系中,字符碼長是1 個(gè)字節(jié),它們?cè)赨nicode碼“基本平面”中字符碼長是2 個(gè)字節(jié),編碼效率降低了一半,編碼效率低是Unicode 碼的最大缺點(diǎn)。

世界上大多數(shù)人使用拼音文字,由于Unicode碼編碼效率太低,他們無奈就只得使用ANSI 碼體系。在以字節(jié)為編碼單位不變的情況下,這種局面無法改變。

一個(gè)文字編碼的平臺(tái)中,各種文字的編碼應(yīng)該是獨(dú)立的,各種文字的地位應(yīng)該是平等的。

ANSI 碼體系雖然包括了許多國家的文字編碼標(biāo)準(zhǔn),但是它不能稱為文字編碼的平臺(tái),因?yàn)椴粌H各種文字編碼不獨(dú)立,而且其他文字與英文的地位也不平等。

Unicode 碼雖然效率很低,但它是目前唯一可使用的文字編碼平臺(tái)。

一種比較理想的文字編碼平臺(tái),不僅各種字符都有獨(dú)立的編碼,而且它們要有比Unicode 碼、ANSI 碼體系更高的編碼效率。

郭碼是一個(gè)從核算單位開始、完全原始創(chuàng)新的文字編碼平臺(tái),由7 種編碼方法組合而成。各種文字在郭碼中都有獨(dú)立編碼,并且編碼效率都比ANSI 碼提高了約30%,比Unicode 碼提高得就更多。

1 基本方式編碼

世界上有上百種文字,各種文字所包含的字符數(shù)量相差懸殊。例如,英文有大小寫字母52 個(gè),中國漢字有約10 萬個(gè),是英文字母數(shù)量的1000多倍。

ANSI 碼和Unicode 碼以字節(jié)(二進(jìn)制的8 位,容量為256)為單位對(duì)各種文字編碼,1 個(gè)字節(jié)容量不夠就使用2 個(gè)字節(jié),再不夠就使用4 個(gè)字節(jié)。運(yùn)用這個(gè)單一方法,對(duì)上百種、包含字符數(shù)量相差上千倍的文字編碼,編碼效率不佳也就在所難免。

郭碼設(shè)計(jì)了新的核算單位——“組元”和“半組元”,“組元”是二進(jìn)制的12 位,容量為4096,是字節(jié)容量的16 倍,可以表示的數(shù)字是0 至4095;“半組元”是二進(jìn)制的6 位,容量為64,可以表示的數(shù)字是0 至63。

Unicode 碼的編碼空間由4 個(gè)字節(jié)構(gòu)成,依順序分別為組號(hào)、面號(hào)、區(qū)號(hào)、位號(hào)。2 字節(jié)的容量是65536,3 字節(jié)的容量是16777216(1600 多萬),4 字節(jié)的容量是近43 億。Unicode 碼的組號(hào)只使用了0至127,故它的總?cè)萘渴?147483648(21億多)[2]。

2 個(gè)組元的容量是16777216(4096×4096),與3個(gè)字節(jié)的容量相同,故2 個(gè)組元就足以為全世界的文字編碼。

本文中所稱“全世界的文字”的意思是,中國漢字以外的文字基本上是以“GB13000.1—93 ISO/IEC 10646.1—1993”[2]為參照物,中國漢字按10萬個(gè)考慮。

漢字有真、草、隸、篆等多種寫法,書法作品中有“百壽圖”,有書法家聲稱:“壽字有5000種寫法”,書法藝術(shù)創(chuàng)新是沒有止境的。對(duì)于書法藝術(shù)中的文字郭碼都不予考慮,郭碼只專注于人們?nèi)粘=涣餍畔⑹褂玫奈淖帧?/p>

郭碼包括多種編碼方法,其中最基礎(chǔ)的編碼方法是“基本方式”編碼,它是2 組元的區(qū)位碼,第1 個(gè)組元是區(qū)號(hào),第2 個(gè)組元是位號(hào)。

ANSI 碼和Unicode 碼形成的文字文件中以字節(jié)為單位,流淌的是“字節(jié)流”。郭碼形成的文字文件中以組元為單位,流淌的是“組元流”。

Unicode 5.0.0 版數(shù)據(jù)顯示,它已經(jīng)給近10 萬個(gè)字符編碼,其中有6 萬多是中國漢字。考慮到還有3 萬多中國漢字沒有編碼,以及數(shù)千個(gè)藏文“垂直預(yù)組件”沒有編碼,郭碼準(zhǔn)備為約14 萬個(gè)字符編碼。

一個(gè)組元可以表示的數(shù)字是0 至4095,郭碼對(duì)組元值范圍做出設(shè)定:

“0”暫時(shí)不用。區(qū)號(hào)遞減排序,為4095 至4051,45 個(gè)區(qū)。位號(hào)遞增排序,為1 至4000,4000 個(gè)位。鏈頭和鏈尾標(biāo)識(shí)符使用4001 至4018。4019 至4050 為備用,它將來可能作為區(qū)號(hào)使用,也可能作為鏈頭標(biāo)識(shí)符使用,還可能做其他應(yīng)用。

如此設(shè)置,區(qū)位碼的編碼空間是18 萬。區(qū)號(hào)與位號(hào)處于不同的值段,僅從組元的數(shù)值即可判斷它是區(qū)號(hào),還是位號(hào),或者是其他。

本文中,如果沒有特殊聲明,字符編碼的碼值用16 進(jìn)制數(shù)字表示。1 個(gè)字節(jié)用2 個(gè)16 進(jìn)制數(shù)字表示,1 個(gè)組元用3 個(gè)16 進(jìn)制數(shù)字表示。

例如,以下字符的區(qū)位碼分別是,漢字“岱”為“FFE 6E9”(十進(jìn)制4094 1769),“山”為“FFF 9CB”(4095 2507),希臘字母“ω”為“FD4 300”(4052 768),日文平假名“は”為“FE6 125”(4070 293),英文字母“F”為“FFF 047”(4095 71)。

區(qū)位碼碼長都是2 個(gè)組元,長度等價(jià)3 個(gè)字節(jié)。這些字符在Unicode 碼中,碼長都是2 個(gè)字節(jié),雖然郭碼的區(qū)位碼保證了每個(gè)字符都有獨(dú)立編碼,但是它的編碼效率比Unicode 碼低了很多。

為提高各種文字的編碼效率,郭碼要對(duì)它們做“量體裁衣”式的編碼。

郭碼根據(jù)各種文字所包含字符數(shù)量的多少將全世界的文字歸入三個(gè)字符集:大字符集、中字符集、小字符集。

大字符集包括10 萬個(gè)中國漢字。

一種文字所含字符數(shù)量數(shù)以千計(jì)的就歸入中字符集,它包括朝鮮文(韓文)、藏文、彝文、日文。

小字符集中文字包括拉丁系列、西里爾系列、希臘文、阿拉伯系列、天成文等多種拼音文字,每種文字字母的數(shù)量是幾十個(gè)或一二百個(gè)。

對(duì)不同的字符集,郭碼開發(fā)了不同的編碼方法。

2 缺省方式編碼

“缺省原理”的意思是在一定條件下,對(duì)一些眾所周知的或者事先已有約定的信息進(jìn)行省略,受眾對(duì)其給予默認(rèn),不影響他們對(duì)全部信息的完整理解。

例如廣播電臺(tái)報(bào)道新當(dāng)選政協(xié)委員的名單,每位委員的完整信息包括三部分:姓名、性別、民族。因?yàn)樵谥袊蟛糠值恼f(xié)委員是男性,大部分的政協(xié)委員是漢族,這已是眾所周知的,“男”“漢族”在電臺(tái)廣播時(shí)就給省略了。實(shí)際廣播時(shí)是“李瑞環(huán)、陳慕華、女、阿布都熱西提、維吾爾族”。聽眾知道李瑞環(huán)是男性、漢族,陳慕華是漢族,阿布都熱西提是男性。

郭碼特別設(shè)定4095 區(qū)為“特區(qū)”,該區(qū)的字符編碼可以只用位號(hào),不用區(qū)號(hào),區(qū)號(hào)被缺省。與郭碼配套的文字處理軟件依序?qū)徱暪a文字文件中的各個(gè)組元,若遇到某個(gè)位號(hào)前面沒有區(qū)號(hào)(也沒有鏈頭),就認(rèn)定它是4095 區(qū)的。

大字符集中是中國漢字,郭碼設(shè)定4095 區(qū)至4071 區(qū)(FFF 區(qū)至FE7 區(qū))為中國漢字占用。

信息論的信源編碼部分有個(gè)“變長碼原理”,其意思是,對(duì)一個(gè)集合中的各個(gè)對(duì)象編碼,那些使用頻度比較高的對(duì)象用短碼,那些使用頻度比較低的對(duì)象用長碼,如此操作可使總體的平均碼長最短,也就是編碼效率最高。

中國漢字編碼的國家標(biāo)準(zhǔn)有GB2312-80[3]和GB18030—2000,后者兼容前者。

GB2312-80 中包括6763 個(gè)漢字,其中“一級(jí)漢字”3755 個(gè),是常用的漢字,“二級(jí)漢字”3008個(gè),是次常用的漢字?!耙患?jí)漢字”的范圍,從“啊”(B0 A1)到“座”(D7 F9)。

中國漢字很多,它們的使用頻度相差懸殊。統(tǒng)計(jì)資料顯示,“一級(jí)漢字”的使用頻度占總體的99%以上[4],也就是說,其余9 萬多漢字的使用頻度還不到總體的1%。

郭碼將“一級(jí)漢字”全部放入4095 區(qū),“二級(jí)漢字”中少量的使用頻度較高的漢字和漢文常用的標(biāo)點(diǎn)符號(hào)也放入該區(qū)。

英文字符(ASCII 字符)本屬于“小字符集”,因?yàn)樵趪H交流中使用比較多,作為特例,也將它們放入4095 區(qū)。

利用“缺省原理”,在生成郭碼文字文件時(shí),4095 區(qū)內(nèi)的字符使用“缺省方式編碼”,即只使用位號(hào)編碼,碼長是1 個(gè)組元(二進(jìn)制的12 位)。

根據(jù)信源編碼理論,漢字的平均編碼長度約為

12×0.99+24×0.01=12.12 (二進(jìn)制的位)

國家標(biāo)準(zhǔn)GB18030—2000 中漢字的平均碼長約為二進(jìn)制的16 位多一點(diǎn),4 字節(jié)編碼漢字的使用頻度非常低,它們對(duì)平均碼長影響很小。

從以上數(shù)據(jù)可以看出郭碼的“缺省方式編碼”比ANSI 體系的中國國家標(biāo)準(zhǔn)的漢字的平均碼長要短,編碼效率更高,大約提高了30﹪。

本文中所舉例子,都使用純文本文件(txt),這樣便于比較編碼效率的高低。

例1 杜甫的《望岳》詩『岱宗夫如何,齊魯青未了。造化鐘神秀,陰陽割昏曉。蕩胸生層云,決眥入歸鳥。會(huì)當(dāng)凌絕頂,一覽眾山小。』 48 個(gè)字符。

使用GB18030—2000 編碼是96 個(gè)字節(jié):

E1 B7 D7 DA B7 F2 C8 E7 BA CE A3 AC C6 EB C2 B3 C7 E0 CE B4 C1CB A1 A3 D4 EC BB AF D6 D3 C9 F1 D0 E3 A3 AC D2 F5 D1 F4 B8 EE BB E8 CF FE A1 A3 B5 B4 D0 D8 C9 FA B2 E3 D4 C6 A3 AC BE F6 ED F6 C8 EB B9 E9 C4 F1 A1 A3 BB E1 B5 B1 C1 E8 BE F8 B6 A5 A3 AC D2 BB C0 C0 D6 DA C9 BD D0 A1 A1 A3

每個(gè)漢字和標(biāo)點(diǎn)符號(hào)的碼長都是2 個(gè)字節(jié),僅列出第一句的編碼解釋:

E1 B7 岱 D7 DA 宗 B7 F2 夫 C8 E7 如 BA CE 何A3 AC,C6 EB 齊 C2 B3 魯 C7 E0 青 CE B4 未 C1 CB 了 A1 A3。

郭碼的缺省方式編碼是75 個(gè)字節(jié):

FF E6 E9 F0 C3 64 99 74 5A F4 78 DF 72 F9 32 B9 86 E9 F2 EE 04 49 9E A7 9F FC 83 F4 7D 51 CF 23 BE 4D 2C 40 F2 E2 6A C7 8A 08 17 FD DE F4 75 FA FF EB 90 99 B4 17 82 9F 2E 4C B2 67 70 65 FC 2B 9F 47 D1 76 80 EA E9 CB C4 1F 2E

編碼解釋:

FFE 6E9 岱 F0C 宗 364 夫 997 如 45A 何 F47,8DF 齊 72F 魯 932 青 B98 未 6E9 了 F2E。E04 造499 化 EA7 鐘 9FF 神 C83 秀 F47,D51 陰 CF2 陽3BE 割 4D2 昏 C40 曉 F2E。26A 蕩 C78 胸 A08 生17F 層 DDE 云 F47,5FA 決 FFE B90 眥 99B 入 417歸 829 鳥 F2E。4CB 會(huì) 267 當(dāng) 706 凌 5FC 絕 2B9 頂F47,D17 一 680 覽 EAE 眾 9CB 山 C41 小 F2E。

全詩40個(gè)漢字、8個(gè)標(biāo)點(diǎn)符號(hào),只有“岱”和“眥”不在4095 區(qū),它們使用“基本方式”的2 組元編碼,分別是“FFE 6E9”和“FFE B90”。

詩中其余的漢字和標(biāo)點(diǎn)符號(hào)都在4095 區(qū)中,都是“缺省方式”的1組元編碼。文件全長50個(gè)組元,即75個(gè)字節(jié)。一個(gè)字符的平均碼長是1.5625個(gè)字節(jié),即二進(jìn)制的12.5 位。郭碼比GB18030—2000 編碼節(jié)省了21 個(gè)字節(jié),編碼效率提高了約28%。因?yàn)? 個(gè)漢字為非4095 區(qū)漢字,它們?cè)诒驹娭姓伎傋址麛?shù)量的4.17%,超過了1%,故編碼效率的提高沒有達(dá)到30%。

例2 2008 年,溫家寶總理在全國人民代表大會(huì)上所做的“政府工作報(bào)告”,內(nèi)容涉及政治、經(jīng)濟(jì)、外交、工業(yè)、農(nóng)業(yè)、文教衛(wèi)生等諸多方面,文字使用頗具廣泛性。全文共使用漢字22045 個(gè),其中非4095 區(qū)漢字4 個(gè),“崛、瀆、諉、崛”,占使用漢字總數(shù)的0.0001814,即不到萬分之二。全文沒有使用一個(gè)英文字母(用了一些阿拉伯?dāng)?shù)字)。全文使用GB18030—2000 編碼是49952 個(gè)字節(jié),用郭碼缺省方式編碼是38364 個(gè)字節(jié),節(jié)省了11588 個(gè)字節(jié),編碼效率提高了30.21%。

阿拉伯?dāng)?shù)字在GB18030—2000 編碼中碼長是1個(gè)字節(jié),在郭碼缺省方式編碼中碼長是1 個(gè)組元,它們?cè)诰幋a效率上是負(fù)增長。

由于文件太長,就沒有在此列出它的碼值及編碼解釋。

缺省方式編碼的單位是組元,生成的郭碼文字文件的總長度是整數(shù)個(gè)組元。組元總數(shù)是偶數(shù)時(shí),恰好是整數(shù)個(gè)字節(jié),組元總數(shù)是奇數(shù)時(shí)就不是整數(shù)個(gè)字節(jié),需要在文件的最后補(bǔ)碼半個(gè)字節(jié),其值為“0000”(二進(jìn)制的4 位),此即為“文件補(bǔ)碼”。

郭碼的漢字編碼應(yīng)用了變長碼原理,但是應(yīng)用此定理的前提是需要知道10 萬個(gè)漢字中哪些是最常用的、哪些是次常用的、哪些是很少用的。

在此要感謝我國文字方面的科研工作者,他們長期從事有關(guān)漢字的基礎(chǔ)性的研究工作,對(duì)海量的漢字資料做統(tǒng)計(jì)、分析,總結(jié)出了漢字使用頻度列表?!?755 個(gè)一級(jí)漢字的使用頻度在99%以上”就是由此得出。沒有它,變長碼原理也就無法在郭碼的漢字編碼中應(yīng)用[4]。

現(xiàn)在我國使用的文字處理軟件執(zhí)行的是GB18030—2000 標(biāo)準(zhǔn),它可以打開、編輯ANSI 碼和Unicode 碼的文件,若用它打開郭碼生成的文件,顯示的將是一堆亂碼。

郭碼的正確性需要得到實(shí)驗(yàn)的證明。

證明過程如下,筆者編寫了一對(duì)工具軟件A 和B。工具軟件A 可以把ANSI 碼文字文件(純文本文件)W1 轉(zhuǎn)譯為郭碼文字文件W2,工具軟件B可以把郭碼文件W2 轉(zhuǎn)譯為ANSI 碼文件(純文本文件)W3。轉(zhuǎn)譯回來的文件W3 與“原始文件”W1完全相同,這就說明郭碼文件W2 與ANSI 碼文件W1 承載著完全相同的文字信息。

以上例1 中,杜甫的《望岳》詩,使用ANSI碼(GB18030—2000)編碼(純文本文件)是96 個(gè)字節(jié)(W1)。使用工具軟件A 可以將其轉(zhuǎn)譯為長度為75 個(gè)字節(jié)的郭碼文件W2,具體內(nèi)容如前所示。使用工具軟件B 可以把郭碼文件W2 轉(zhuǎn)譯為ANSI碼文件(純文本文件)W3,W3 文件與W1 文件完全相同,不僅是一個(gè)漢字不能差,而且一個(gè)標(biāo)點(diǎn)符號(hào)不能差,一個(gè)“空格”、一個(gè)“控制符”也都不能差。以此證明75 個(gè)字節(jié)的郭碼文件和96 個(gè)字節(jié)的ANSI 碼文件承載了完全相同的文字信息。

本文所有舉例中的郭碼文字文件都是由上述方法得來的。以后對(duì)各種文字推出多種編碼方法,實(shí)驗(yàn)證明的方法還是基本相同的,只不過工具軟件A和工具軟件B 需要不斷升級(jí)。

文字編碼的格式在ANSI 碼、Unicode 碼與郭碼之間相互轉(zhuǎn)換不困難,本文舉例的郭碼數(shù)據(jù)大多是從中國標(biāo)準(zhǔn)GB18030—2000 編碼轉(zhuǎn)換來的。

3 第一類符鏈編碼

缺省方式編碼中,英文字符的碼長是1 個(gè)組元,比Unicode 碼的2 個(gè)字節(jié)短,但是比ANSI 碼的1個(gè)字節(jié)要長。英文字符需要有新的編碼方法。

“能否讓它們?cè)诠a中不降低編碼效率或者讓它們少降低編碼效率,使它們能夠基本維持在ANSI 碼中的水平、碼長大約是1 個(gè)字節(jié)”,這是最初的思考。

以ANSI 碼和Unicode 碼形成的文字文件中是“字節(jié)流”,以郭碼形成的文字文件中是“組元流”。若英文字符以字節(jié)形式存在于郭碼中,它就是個(gè)“特例”,并且這個(gè)特例不應(yīng)該破壞郭碼組元流的基本運(yùn)作秩序。

計(jì)算機(jī)程序運(yùn)行過程中有“中斷操作”,一個(gè)主進(jìn)程程序運(yùn)行過程中遇到“中斷語句”時(shí),就要停止主進(jìn)程程序,改為執(zhí)行中斷程序,在執(zhí)行完中斷程序后再從以前停止的地方繼續(xù)執(zhí)行主進(jìn)程的程序。為了保證主進(jìn)程程序與中斷程序的有序交接,在運(yùn)行中斷程序前要對(duì)主進(jìn)程的“接口參數(shù)”做“堆棧式保存”。

漢字文件中間出現(xiàn)一段英文,若按缺省方式編碼,每個(gè)英文字符是1 組元編碼。若將這段英文按ANSI 碼的1 字節(jié)編碼,它與郭碼的組元流設(shè)計(jì)相矛盾。解決辦法是將漢字編碼(1 組元或者2 組元編碼)看作是“主進(jìn)程的程序”,將英文字符的1字節(jié)編碼看作是“中斷程序”,如此一來,1 字節(jié)編碼的英文字符和1 組元(或2 組元)編碼的漢字就可以“和平共處”了。

欲使1 字節(jié)編碼的英文字符在郭碼中順利應(yīng)用,必須要解決這個(gè)“中斷程序”與“主進(jìn)程”的過渡、銜接問題。

郭碼將漢字編碼當(dāng)作主進(jìn)程對(duì)待,1 字節(jié)編碼的英文字符視為“中斷程序”,將這段連續(xù)的英文字符編碼置于一個(gè)特定的“鏈”中,稱這個(gè)鏈為“第一類符鏈”。“鏈”由“鏈頭”“鏈體”和“鏈尾”三部分組成。

為了區(qū)別于主進(jìn)程的組元、并限定鏈的范圍,設(shè)置“鏈頭標(biāo)識(shí)符”(簡稱“鏈頭”)和“鏈尾標(biāo)識(shí)符”(簡稱“鏈尾”)。它們各為一個(gè)組元,它們的數(shù)值與區(qū)位碼的區(qū)號(hào)、位號(hào)均不相同。鏈頭和鏈尾之間是“鏈體”,鏈體元素的單位是字節(jié),內(nèi)容是英文字符的1 字節(jié)編碼。

人們?nèi)粘懳恼聲r(shí),經(jīng)常使用“圓括號(hào)”,即“()”,鏈頭類似前半個(gè)括號(hào)“(”,鏈尾類似后半個(gè)括號(hào)“)”,鏈體就是括號(hào)里的內(nèi)容。

郭碼的核算單位是組元,現(xiàn)在計(jì)算機(jī)內(nèi)運(yùn)行的程序、數(shù)據(jù)都以字節(jié)為單位,也就是說,二進(jìn)制12位的組元要“落實(shí)”在8 位的字節(jié)中。一個(gè)組元必定“跨在”兩個(gè)字節(jié)上,會(huì)有兩種情況,若前一字節(jié)中占8 位、在后一字節(jié)中占前4 位,稱這種形式的“制式”為“84 式”;若前一字節(jié)中占后4 位、在后一字節(jié)中占8 位,稱這種制式為“48 式”。在郭碼文字文件中,組元就是以84 式、48 式、84 式、48 式……這樣交替排列的。

郭碼設(shè)定第一類符鏈的鏈頭值為4001(FA1),鏈尾值為4002(FA2)。

ANSI 碼中一個(gè)英文字符的編碼全部在一個(gè)字節(jié)里,稱其為“08 式”。在郭碼的第一類符鏈中,它還有另一種存在形式,8 位編碼分處于兩個(gè)字節(jié)中,在前一字節(jié)中占后4 位,后一字節(jié)中占前4 位,稱其為“44 式”。當(dāng)鏈頭是48 式時(shí),其后面的英文字符編碼都是08 式;當(dāng)鏈頭是84 式時(shí),其后面的英文字符編碼都是44 式。

為了引入符鏈后,不打亂郭碼組元流的秩序,符鏈的總長度必須是整數(shù)個(gè)組元。因鏈頭、鏈尾各是一個(gè)組元,所以,鏈體的總長度就必須是整數(shù)個(gè)組元。

鏈體中元素的單位是字節(jié),并且連續(xù)出現(xiàn)的英文字符的數(shù)量L 是不確定的,因此就需要對(duì)L 進(jìn)行分類處理。為保障鏈體長度成為整數(shù)個(gè)組元,需要酌情增加“鏈內(nèi)補(bǔ)碼”。

L 的數(shù)量只有三類情況,第一類,L 為“3N 型”;第二類,L 為“(3N+1)型”;第三類,L 為“(3N+2)型”;N 為正整數(shù)。

第一類,3N 個(gè)英文字符的ANSI 編碼是3N 個(gè)字節(jié),3 個(gè)字節(jié)恰好是2 個(gè)組元,3N 個(gè)字節(jié)就是2N 個(gè)組元,整數(shù)個(gè)組元不需要補(bǔ)碼。鏈體為2N 個(gè)組元,偶數(shù)個(gè)組元。

第二類,根據(jù)前一結(jié)論,(3N+1)個(gè)字節(jié)是2N 個(gè)組元再加1 個(gè)字節(jié),這個(gè)字節(jié)要“擴(kuò)展為組元”需要加補(bǔ)二進(jìn)制的4 位,可以是“0000”(二進(jìn)制),此即為“鏈內(nèi)補(bǔ)碼”。補(bǔ)碼后鏈體為(2N+1)個(gè)組元,奇數(shù)個(gè)組元。

第三類,(3N+2)個(gè)字節(jié)是2N 個(gè)組元再加2個(gè)字節(jié),這2 個(gè)字節(jié)要“擴(kuò)展為2 個(gè)組元”,需要加補(bǔ)二進(jìn)制的8 位,即1 個(gè)字節(jié)。該字節(jié)的值設(shè)定為129(16 進(jìn)制的81),如此賦值是為了與英文字符ANSI 編碼的值(0~127)相區(qū)別。補(bǔ)碼后鏈體為(2N+2)個(gè)組元,偶數(shù)個(gè)組元。

鏈體經(jīng)過上述處理,再配上鏈頭4001(FA1)、鏈尾4002(FA2),連續(xù)英文字符的編碼就形成為第一類符鏈編碼。

鏈頭、鏈尾、鏈內(nèi)補(bǔ)碼,它們本身不是所要傳輸?shù)挠⑽淖址男畔?,而是?gòu)成第一類符鏈必須要付出的額外開銷。若鏈體三類情況出現(xiàn)的概率相同,平均每個(gè)符鏈補(bǔ)碼4 位,再考慮鏈頭、鏈尾需要占用24 位,第一類符鏈付出的“平均成本”是28 位,3.5個(gè)字節(jié)。這個(gè)“平均成本”與鏈體內(nèi)包含的英文字符的數(shù)量無關(guān)。

理論上講,一個(gè)英文字符也可以生成第一類符鏈,但“經(jīng)濟(jì)上”不合算。若不生成符鏈,它的碼長是1 個(gè)組元,1.5 個(gè)字節(jié)。若生成符鏈,鏈頭、鏈尾加上鏈內(nèi)補(bǔ)碼4 位共需3 個(gè)組元,4.5 個(gè)字節(jié)。

8 個(gè)連續(xù)的英文字符不生成符鏈時(shí),碼長是8個(gè)組元,12 個(gè)字節(jié)。若生成符鏈,“8 個(gè)”屬于“3N+2型”,需鏈內(nèi)補(bǔ)碼8 位,符鏈總長度也是12 個(gè)字節(jié)。

當(dāng)連續(xù)的英文字符達(dá)到9 個(gè)時(shí),不生成符鏈碼長是9 個(gè)組元,13.5 個(gè)字節(jié)。“9 個(gè)”屬于“3N 型”,鏈體不需要鏈內(nèi)補(bǔ)碼,符鏈長度為8 個(gè)組元,12 個(gè)字節(jié),生成符鏈轉(zhuǎn)為“贏利”。這也就是郭碼生成第一類符鏈的起始標(biāo)準(zhǔn)。連續(xù)不足9 個(gè)的英文字符不生成第一類符鏈,采用缺省方式編碼。

出現(xiàn)英文字符時(shí),生成還是不生成符鏈,由文字處理軟件來決定。當(dāng)然,此文字處理軟件要比現(xiàn)在使用的文字處理軟件復(fù)雜,可稱為“智能型文字處理軟件”。

舉例說明第一類符鏈編碼。以下的ANSI 碼就是GB18030—2000 標(biāo)準(zhǔn)的編碼。

例3 短文『小二黑給小芹發(fā)了條短信“I love you”,小芹收到了但是沒看懂,因?yàn)樗龥]學(xué)過英文。』46 個(gè)字符。

ANSI 碼的編碼80 個(gè)字節(jié)(略)。

郭碼缺省方式編碼69 個(gè)字節(jié):

C4 13 12 46 63 C8 C4 19 2D 31 46 E9 B1 D2 E0 C6 5F 37 04 A0 21 06 D0 70 07 70 66 02 10 7A 07 00 76 F3 8F 47 C4 19 2D A4 12 73 6E 92 61 A3 37 95 61 62 C2 F4 7D 4E B8 EA C7 79 5C A5 42 BD 5C BA 8F 2E 00 E0 0B

文中英文部分(第19 個(gè)至第33 個(gè)字節(jié))編碼解釋:04 A I 021 空格 06D l 070o 077 v 066 e 021空格 07A y 070 o 076 u

第一類符鏈編碼(缺省方式編碼自動(dòng)生效)68個(gè)字節(jié):

C4 13 12 46 63 C8 C4 19 2D 31 46 E9 B1 D2 E0 C6 5F 37 FA 14 92 06 C6 F7 66 52 07 96 F7 50 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

編碼解釋:

C41 小 312 二 466 黑 3C8 給 C41 小 92D 芹 314發(fā) 6E9 了 B1D 條2E0 短 C65 信 F37 “ FA1 鏈頭 49 I 20 空格 6C l 6F o 76 v 65 e 20 空格79 y 6Fo 75u 0 鏈內(nèi)補(bǔ)碼 FA2 鏈尾 F38 ” F47,C41 小 92D 芹A41 收 273 到 6E9 了 261 但 A33 是 795 沒 616 看2C2 懂 F47,D4E 因 B8E 為 AC7 她 795 沒 CA5 學(xué)42B 過 D5C 英 BA8 文 F2E。00E 控制符 00B 控制符0 文件補(bǔ)碼

其中鏈內(nèi)補(bǔ)碼和文件補(bǔ)碼各為二進(jìn)制的4 位。

在第一類符鏈中英文字符的碼值與ANSI 碼中的碼值是相同的。

文中英文句子是10 個(gè)連續(xù)的英文字符(包括2個(gè)空格),可以生成符鏈,鏈頭FA1 為84 式,鏈尾FA2 為84 式,鏈體中英文字符的編碼均為44 式。第30 個(gè)字節(jié)“50”是鏈體的最后一個(gè)字節(jié),它的低4 位是鏈內(nèi)補(bǔ)碼。因?yàn)椤?0 個(gè)”屬于“(3N+1)型”,應(yīng)補(bǔ)二進(jìn)制4 位。

該短文的郭碼有符鏈比無符鏈少了一個(gè)字節(jié),原因就在這句英文。英文字符是10 個(gè),缺省表示方式編碼是10 個(gè)組元,15 個(gè)字節(jié);有符鏈時(shí)符鏈全長為9 個(gè)組元,13.5 個(gè)字節(jié)。后者比前者少1 個(gè)組元,1.5 個(gè)字節(jié),但是有半個(gè)字節(jié)花費(fèi)在文件的最后,最后的字節(jié)“B0”的低4 位是文件補(bǔ)碼。

由此例可以看出,生成了第一類符鏈的郭碼比沒有符鏈的郭碼,雖然增加了鏈頭、鏈尾、鏈內(nèi)補(bǔ)碼、文件補(bǔ)碼的開銷,但是相比缺省方式編碼編碼效率還是有所提高。

例4 短文『He said:"That's one small step for a men,one giant leap for mankind."』

ANSI 碼編碼73 個(gè)字節(jié)(略)。

郭碼的缺省方式編碼110 個(gè)字節(jié)(略)。

郭碼第一類符鏈編碼77 個(gè)字節(jié):

FA 14 86 52 07 36 16 96 43 A2 02 25 46 86 17 42 77 32 06 F6 E6 52 07 36 D6 16 C6 C2 07 37 46 57 02 06 66 F7 22 06 12 06 D6 56 E2 C2 06 F6 E6 52 06 76 96 16 E7 42 06 C6 56 17 02 06 66 F7 22 06 D6 16 E6 B6 96 E6 42 E2 20 D0 A0 FA 20

編碼解釋:

FA1 鏈頭48 H 65e 20 空格73 s 61a 69 i 64 d 3A:20 空格22 " 54 T 68 h 61 a 74 t 27 ' 73 s 20 空格6F o 6E n 65 e 20 空格 73 s 6D m 61 a 6C l 6C l 20 空格73 s 74 t 65 e 70 p 20 空格 66 f 6F o 72 r 20 空格 61 a 20 空格 6D m 65 e 6E n 2C,20 空格6 F o 6E n 65 e 20 空格67 g 69 i 61 a 6E n 74 t 20 空格6C l 65 e 61 a 70 p 20 空格66 f 6 F o 72 r 20 空格6D m 61 a 6E n 6B k 69 i 6E n 64 d 2E .22 " 0D 控制符 0A 控制符 0鏈內(nèi)補(bǔ)碼 FA2 鏈尾 0 文件補(bǔ)碼

本例全部是英文字符,第一類符鏈編碼就是一整個(gè)符鏈。它比ANSI 碼多花費(fèi)了4 個(gè)字節(jié),其中鏈頭1.5,鏈尾1.5,鏈內(nèi)補(bǔ)碼0.5,文件補(bǔ)碼0.5 個(gè)字節(jié)。顯然,英文文件越長第一類符鏈字符的平均碼長越接近1 個(gè)字節(jié)。

與郭碼相配套的文字處理軟件解讀郭碼文字文件時(shí),需要沿組元序列逐個(gè)審視每個(gè)組元,根據(jù)組元的數(shù)值做出相應(yīng)的處理。當(dāng)遇到鏈頭標(biāo)識(shí)符(如FA1)時(shí),不再逐個(gè)審視后面的組元,而是改為向后、在組元序列中搜索鏈尾標(biāo)識(shí)符(FA2)。找到鏈尾后,記錄下它的位置,鏈頭與鏈尾之間就是鏈體。

不同的鏈?zhǔn)骄幋a,鏈頭數(shù)值不同,鏈體構(gòu)成不同,處理方法也不同。第一類符鏈鏈體元素是字節(jié),逐個(gè)字節(jié)處理,遇到“鏈內(nèi)補(bǔ)碼”就跳過去。該鏈處理完,就從鏈尾下面一個(gè)組元開始,繼續(xù)沿組元序列逐個(gè)審視每個(gè)組元。

鏈體內(nèi)是英文字符的ANSI 碼,其值范圍是00至7F。它們跨字節(jié)能夠形成的最大的二進(jìn)制12 位的數(shù)字是“F7F”,即使考慮鏈內(nèi)補(bǔ)碼“81”,能夠形成的最大數(shù)字是“F81”,它們都小于鏈尾值“FA2”,因此,鏈體元素不會(huì)對(duì)搜索鏈尾構(gòu)成干擾。

4 第一類字鏈編碼

郭碼中有多種“鏈?zhǔn)骄幋a”,針對(duì)英文字符的鏈稱為“符鏈”,針對(duì)英文和中國漢字以外文字的鏈稱為“字鏈”。

中字符集中包括日文、彝文、藏文、朝鮮文(韓文),它們包含的字符都數(shù)以千計(jì),都使用“第一類字鏈”編碼。

第一類字鏈由鏈頭、鏈體、鏈尾三部分構(gòu)成,鏈頭、鏈尾各為一個(gè)組元,鏈尾值固定為4002(FA2)。鏈體元素的單位也是組元,全鏈肯定是整數(shù)個(gè)組元,因而第一類字鏈編碼不存在鏈內(nèi)補(bǔ)碼的問題。

因?yàn)橹凶址瘍?nèi)有彝文等數(shù)種文字,故第一類字鏈分為若干組,每組字鏈對(duì)應(yīng)一種文字。

第1 組字鏈對(duì)應(yīng)的是日文,日文的平假名、片假名及日文常用漢字放入4070(FE6)區(qū)?,F(xiàn)代日文中漢字占比越來越少,大量外來詞匯使用片假名,如“テレビ”。

第1 組字鏈的鏈頭為4003(FA3),它與4070區(qū)是固定的配對(duì)關(guān)系。在第1 組字鏈中,鏈體的元素就是該日文字符在4070(FE6)區(qū)內(nèi)的位號(hào)。

例如,日文平假名“た”的基本方式編碼是“FE6 115”,它在第1 組字鏈鏈體內(nèi)時(shí),就只是位號(hào)“115”。

如果有2 個(gè)連續(xù)的日文字符,使用基本方式編碼,它們的編碼長度為4 個(gè)組元;若生成第1 組字鏈,字鏈總長度也是4 個(gè)組元。當(dāng)出現(xiàn)連續(xù)3 個(gè)日文字符時(shí),使用基本方式編碼,長度為6 個(gè)組元;若生成第1 組字鏈,字鏈總長度為5 個(gè)組元。所以,連續(xù)3 個(gè)日文字符就是生成第一類第1 組字鏈的起始標(biāo)準(zhǔn)。

以后其他鏈的“起始標(biāo)準(zhǔn)”也如此計(jì)算,即鏈?zhǔn)骄幋a比基本方式編碼總碼長更短的最少的連續(xù)字符個(gè)數(shù),就是起始標(biāo)準(zhǔn)。

第一類第2 組字鏈對(duì)應(yīng)的是彝文,彝文的全部1222 個(gè)字符都放入4069(FE5)區(qū),位號(hào)是1至1222。第2 組字鏈的鏈頭是4004(FA4),它與4069 區(qū)是固定的配對(duì)關(guān)系。第2 組字鏈鏈體的元素是彝文字符在4069 區(qū)中的位號(hào)。連續(xù)3 個(gè)彝文字符就是生成第2 組字鏈的起始標(biāo)準(zhǔn)[5]。

日文字符已有數(shù)種編碼方法,日本國國家標(biāo)準(zhǔn)編碼(Shift JIS)與GB18030—2000 很相似,同屬ANSI 碼體系,字符是2 字節(jié)編碼。

日本標(biāo)準(zhǔn)編碼(Shift JIS)36 個(gè)字節(jié):

82 BB 82 EA 82 CD 82 BD 82 A2 82 B5 82 BD 82 B1 82 C6 82 C5 82 CD 82 C8 82 A2 82 C5 82 B5 82 E5 82 A4 81 42

每個(gè)字符都是2 字節(jié)編碼,它們的第一個(gè)字節(jié)的碼值都大于“7F”。平假名“”的碼值是“82 BD”。

Unicode 碼編碼38 個(gè)字節(jié):

FF FE 5D 30 8C 30 6F 30 5F 30 44 30 57 30 5F 30 53 30 68 30 67 30 6F 30 6A 30 44 30 67 30 57 30 87 30 46 30 02 30

最前面的2 個(gè)字節(jié)是Unicode 碼的標(biāo)識(shí)符,每個(gè)日文字符都是2 字節(jié)編碼,“”的碼值是“5F 30”。

郭碼第一類第1 組字鏈編碼30 個(gè)字節(jié):

FA 31 13 14 21 25 11 50 FA 10 D1 15 10 91 1E 11 D1 25 12 00 FA 11 D1 0D 13 D0 FC 08 2F A2

編碼解釋:

鏈頭、鏈尾2 個(gè)組元,字符編碼18 個(gè)組元,共20 個(gè)組元,即30 個(gè)字節(jié)。

日本標(biāo)準(zhǔn)編碼(Shift JIS)48 個(gè)字節(jié)(略)。

第一類第1 組字鏈編碼39 個(gè)字節(jié):

FA 31 45 11 51 05 10 D1 25 19 12 09 1A F1 25 15 B1 AF 13 D1 40 13 61 10 10 11 0D 0F 91 1E 1F E1 0E 13 41 0F 08 3F A2

編碼解釋:

本例郭碼的基本方式編碼,需要48 個(gè)組元。每個(gè)字符的編碼由區(qū)號(hào)和位號(hào)組成,24 個(gè)字符的編碼里就有24 個(gè)相同的區(qū)號(hào)(FE6)。

第一類字鏈的第1組字鏈編碼,鏈頭4003(FA3)與區(qū)號(hào)4070(FE6)是固定的配對(duì)關(guān)系,即由鏈頭值就可知區(qū)號(hào)。1 個(gè)鏈頭就代替了24 個(gè)區(qū)號(hào),鏈體內(nèi)只有位號(hào),這是鏈?zhǔn)骄幋a既包括了區(qū)位碼的全部信息又能夠提高編碼效率的基本原理之一。

第1 組字鏈日文字符的平均碼長與一個(gè)鏈內(nèi)字符數(shù)量的多少有密切關(guān)系,字符數(shù)量越多,它們的平均碼長就越接近(大于)二進(jìn)制的12 位。如果日文字符連續(xù)有100 個(gè),它們的平均碼長是1.53 個(gè)字節(jié),即二進(jìn)制的12.24 位,編碼效率比日本標(biāo)準(zhǔn)編碼提高約30.72%。

第一類字鏈的第2 組字鏈,彝文的編碼情況與日文類似。

本文中稱英文、俄文、希臘文等拼音文字為“簡單拼音文字”,它們的字母在生成文字文件時(shí)在一維空間內(nèi)即水平方向上順序排列。朝鮮文、藏文也是拼音文字,但是它們的字母組成“字”時(shí),是在二維空間內(nèi)、即垂直方向和水平方向上組合排列,情況復(fù)雜,故稱它們?yōu)椤皬?fù)雜拼音文字”。

第一類字鏈的第3 組字鏈對(duì)應(yīng)的是藏文。

藏文有字母30 多個(gè),由字母組成藏字比較復(fù)雜,首先幾個(gè)字母上下排列組成“垂直預(yù)組件”(俗稱“字丁”),然后若干個(gè)字丁再在水平方向上排列組成藏字。僅有藏文字母編碼難于表達(dá)藏字的信息(使用“組合式編碼方法”效率非常低),比較可行的方法是對(duì)字丁編碼。有了字丁的編碼,它們就可以象英文字母組成單詞一樣在水平方向上排列構(gòu)成藏字的編碼。

藏文有字母及字丁等字符共7430 個(gè)[6][7][8],需要放在兩個(gè)區(qū)中。

設(shè)定藏文字符編碼放在4068 (FE4)區(qū)和4067(FE3)區(qū)中,這兩個(gè)區(qū)是藏文專屬區(qū),其中,4068區(qū)為“基本區(qū)”,4067 區(qū)為“輔助區(qū)”。藏文字符中使用頻度最高的3999 個(gè)字符放入4068 區(qū),位號(hào)為1 至3999;使用頻度較低的3431 個(gè)字符放入4067 區(qū),位號(hào)為1 至3431。位號(hào)4000(FA0)不做位號(hào)編碼使用,而是特別設(shè)計(jì)它為“假區(qū)號(hào)”,即在鏈內(nèi)作為“區(qū)號(hào)”使用,專指輔助區(qū)4067 區(qū)。

第3 組字鏈的鏈頭是4005(FA5),鏈尾仍是4002(FA2)。鏈頭4005 與區(qū)號(hào)4068 是固定的配對(duì)關(guān)系。

郭碼第一類第3 組字鏈編碼時(shí),基本區(qū)字符的碼值就是其在該區(qū)中的位號(hào),碼長1 個(gè)組元;輔助區(qū)字符碼值由假區(qū)號(hào)4000(FA0)與該字符在輔助區(qū)中的位號(hào)共同組成,碼長為2 個(gè)組元。

如果不設(shè)置“假區(qū)號(hào)”,第3 組字鏈中只能包括基本區(qū)的字符,輔助區(qū)的藏文字符就得使用基本方式編碼,碼長為2 個(gè)組元。藏文使用第3 組字鏈編碼遇到一個(gè)4067 區(qū)的字符時(shí),原字鏈就得結(jié)束,加裝鏈尾FA2。再對(duì)4067 區(qū)的這個(gè)字符做基本方式編碼。后面又是基本區(qū)的字符,再開始生成新的第3 組字鏈,加裝鏈頭FA5……如此“加裝鏈尾”“加裝鏈頭”,增加了鏈頭、鏈尾的開銷。

有了“假區(qū)號(hào)”,雖然輔助區(qū)的藏文字符在字鏈中仍然是2 組元編碼,但是只要使用的是這7430個(gè)之內(nèi)的藏文字符,一段藏文文章編碼就是一整個(gè)字鏈,避免了字鏈的多次“斷裂”,整體編碼效率相對(duì)更高些。

中國向國際標(biāo)準(zhǔn)化組織申請(qǐng)藏文編碼在Unicode 碼中的空間,歷經(jīng)多次申訴與談判,1997年國際標(biāo)準(zhǔn)化組織在基本平面內(nèi)只批給藏文在0F行的256 個(gè)碼位。無奈,藏文編碼標(biāo)準(zhǔn)將1536 個(gè)常用字丁放在了基本平面的“用戶自定義區(qū)”中,為2 字節(jié)編碼,其他5702 個(gè)次常用字丁只能是4字節(jié)編碼。由于Unicode 碼各種文字的用戶都可以使用“用戶自定義區(qū)”,這些編碼是不獨(dú)立的,用戶間相互沖突的風(fēng)險(xiǎn)很大。

郭碼不僅使原來1536 個(gè)2 字節(jié)編碼的字丁改為1 組元編碼,而且2463(3999-1536)個(gè)原來4字節(jié)編碼的字丁也改為1 組元編碼。藏文編碼更高效,并且穩(wěn)定可靠。

第一類字鏈的第4 組字鏈對(duì)應(yīng)的是朝鮮文(韓文),編碼方式與藏文類似。

Unicode 碼(ISO/IEC 10646—93)基本平面中,有朝鮮文字母及諺字6990 個(gè)。它們放入4066 (FE2)區(qū)和4065(FE1) 區(qū),這兩個(gè)區(qū)是朝鮮文專屬區(qū),其中,4066 區(qū)為“基本區(qū)”,4065 區(qū)為“輔助區(qū)”。朝鮮文字符中使用頻度最高的3999 個(gè)放入4066 區(qū),位號(hào)為1 至3999;使用頻度較低的2991 個(gè)字符放入4065 區(qū),位號(hào)為1 至2991。位號(hào)4000 不做位號(hào)編碼使用,設(shè)定為“假區(qū)號(hào)”,用法同前面第3 組。

第4 組字鏈的鏈頭是4006(FA6),鏈尾仍是4002(FA2)。鏈頭4006 與區(qū)號(hào)4066 是固定的配對(duì)關(guān)系。

郭碼的鏈?zhǔn)骄幋a受到“旅游團(tuán)”的啟發(fā)。

近些年來,隨著旅游人數(shù)的不斷增加,有人研究其中的規(guī)律,發(fā)現(xiàn)了商機(jī),成立了旅行社,搞起了“組團(tuán)游”。

旅行社把有相同目的地、相同時(shí)間出游的個(gè)人召集起來,組成一個(gè)旅行團(tuán)。該團(tuán)是地點(diǎn)、日程固定,機(jī)票、景點(diǎn)門票、食宿完全由旅行社給辦理,參團(tuán)的游客只需按旅行社的“菜單”繳費(fèi)即可。

組團(tuán)游不僅人數(shù)多(旅行團(tuán)有最低人數(shù)限制),而且計(jì)劃性強(qiáng),便于民航事先調(diào)度安排,從而提高飛機(jī)上座率、降低運(yùn)營成本,所以民航愿意給它打折。酒店、景區(qū)情況也類似。因此,組團(tuán)游旅行社能賺錢,游客能省心省錢,民航、酒店、景區(qū)能多贏利,形成了一個(gè)“多贏”的局面。

相比之下,“個(gè)人游”(散客)隨意性強(qiáng),對(duì)民航、酒店而言有太多不可預(yù)知的因素,要承擔(dān)更多的風(fēng)險(xiǎn),故它們對(duì)個(gè)人游的收費(fèi)定價(jià)較高。

ANSI 碼和Unicode 碼把各種文字的字符看作許多互不相關(guān)的個(gè)體,當(dāng)作“散客”對(duì)待,字符編碼需付出較高的代價(jià)(編碼較長)。郭碼中的“基本方式編碼”也是如此。

筆者注意并研究了各國文字的使用情況,發(fā)現(xiàn)了其中的規(guī)律,搞起了文字編碼的“組團(tuán)游”——鏈?zhǔn)骄幋a。組團(tuán)游和鏈?zhǔn)骄幋a都發(fā)揮了“團(tuán)隊(duì)效應(yīng)”。

世界上各種文字,筆畫多少、字符數(shù)量等千差萬別,但它們都有共同的功能、有共同的規(guī)律。語言和文字都是人們傳遞信息的工具。受到發(fā)言者(作者)和聽眾(讀者)所掌握的語言(文字)能力的限制,為了交流的順暢,大多數(shù)情況下是使用同一種語言(同一種文字)來表達(dá)的。

人們使用某種文字寫文章,是為了表達(dá)想法,傳遞信息。這需要大量同種文字的字符相繼連接、構(gòu)成“詞”、組成“句子”、再形成文章才能實(shí)現(xiàn)。因此,同一種文字的各個(gè)字符經(jīng)常是以“團(tuán)隊(duì)”形式出現(xiàn)的,這是文字使用的普遍規(guī)律。

郭碼的策略是,盡量搞字符的“組團(tuán)游”(鏈?zhǔn)骄幋a),實(shí)在不能“組團(tuán)”的,再搞“個(gè)人游”(基本方式編碼)。

5 第二類字鏈編碼

小字符集中的文字是與英文情況類似的拼音文字,既然英文字符可以通過第一類符鏈編碼使得每個(gè)字符的平均碼長接近一個(gè)字節(jié),那么小字符集其他的拼音文字也可以通過鏈?zhǔn)骄幋a取得相同的效果。

用于小字符集文字編碼的鏈稱為“第二類字鏈”。

由于小字符集包括的文字種類很多,就將它們分為5 個(gè)組。

第1 組包括拉丁系的文字,有法文、德文、西班牙文等。還有中國的壯文、苗文、瑤文。

第2 組包括阿拉伯系的文字,有阿拉伯文、波斯文、烏爾都文、哈薩克文、維吾爾文、柯爾克孜文等。

第3 組包括印度的文字,有天成文(梵文)、孟加拉文、錫克文、古吉拉特文、奧里亞文、泰米爾文、泰盧固文、卡納達(dá)文、德拉維文等。

第4 組包括西里爾系文字,有俄文、烏克蘭文、塞爾維亞文、保加利亞文、蒙古文(蒙古國)、馬其頓文等。還有希臘文、希伯來文。

第5 組包括蒙古文(中國)、傣文、錫伯文、泰文、高棉文、僧加羅文等。

第二類字鏈包括5 組編碼,各組的鏈頭值依次是4007(FA7)、4008(FA8)、4009 (FA9)、4010(FAA)、4011(FAB),它們固定配對(duì)的區(qū)號(hào),依次是4060(FDC)、4059(FDB)、4058(FDA)、4057(FD9)、4056(FD8)。

鏈尾值都是4002(FA2)。鏈體元素單位是字節(jié),其第一個(gè)字節(jié)是“基本段的段號(hào)”,以后的字節(jié)是字符編碼及鏈內(nèi)補(bǔ)碼。

每一個(gè)區(qū)劃分為16 個(gè)“段”,一個(gè)段包容一種或數(shù)種拼音文字。每個(gè)段長度為239 個(gè)位(“位號(hào)”的位)。每個(gè)段的起始位置是“段地址”,16 個(gè)段的段地址依次為1,240,479,718,957,1196,1435,1674,1913,2152,2391,2630,2869,3108,3347,3586。

16 個(gè)段的“段號(hào)”依次為255,254,253,252,251,249,248,247,246,245,244,243,242,241,240,239?!?50”(16 進(jìn)制的FA)不在其中。

段內(nèi)的“子位號(hào)”是字符的位號(hào)與其所在段的段地址之差,其值分別為0,1,2,…,161,163,164,…,237,238。每段空閑一個(gè)碼位,“162”(A2)值不使用,只使用238 個(gè)子位號(hào)。例如,段號(hào)是248(按序是第7 段,其段地址為1435),子位號(hào)為200,其位號(hào)就是1635。

段號(hào)與段地址是固定的對(duì)應(yīng)關(guān)系,由于許多段地址數(shù)值大于255,無法用一個(gè)字節(jié)表示,故而用段號(hào)“代表”段地址的信息。

段號(hào)中沒有250(FA),子位號(hào)中沒有162(A2),是為了避免在鏈體中形成值為“FA2”的“組元”,以保證對(duì)鏈尾(FA2)的準(zhǔn)確搜索。

鏈體總長度必須是整數(shù)個(gè)組元,鏈內(nèi)補(bǔ)碼與第一類符鏈的鏈內(nèi)補(bǔ)碼相同,三種類型分別補(bǔ)二進(jìn)制的0 位(不用補(bǔ)碼)、4 位和8 位,補(bǔ)4 位時(shí)補(bǔ)“0000”(二進(jìn)制),補(bǔ)8 位時(shí)補(bǔ)“1111 1010”(16 進(jìn)制的FA,10 進(jìn)制的250)。由于子位號(hào)的最大值是238(EE),故補(bǔ)碼“FA”不會(huì)與子位號(hào)混淆,又因?yàn)檠a(bǔ)碼“FA”已在鏈體的最后,它不會(huì)影響對(duì)鏈尾的準(zhǔn)確搜索。

一組鏈內(nèi)只能有一個(gè)段是“基本段”,同區(qū)其余的段作為“輔助段”,鏈體的第一個(gè)字節(jié)就是基本段的段號(hào)?;径蝺?nèi)字符的編碼用子位號(hào)表示(1字節(jié)),輔助段字符編碼用輔助段的段號(hào)和子位號(hào)表示(2 字節(jié))。如此設(shè)計(jì),使得一個(gè)區(qū)(16 個(gè)段)內(nèi)的字符均可在一個(gè)鏈內(nèi)。因此,同一種文字的字符應(yīng)盡可能放在同一個(gè)段內(nèi)。如果一個(gè)段內(nèi)放不下,要將該種字符中使用頻度最高的238 個(gè)字符放在同一段(基本段)內(nèi),其余字符放在同區(qū)其他段中。

一組字鏈中,哪個(gè)段是基本段并不是一成不變的,可以由用戶選擇。例如,俄文用戶就選擇含俄文字符的段為基本段。與郭碼配套的文字處理軟件應(yīng)該給用戶提供這種功能。

因?yàn)榈诙愖宙湹母鹘M鏈頭與區(qū)號(hào)是固定配對(duì)關(guān)系,所以由鏈頭值就可知區(qū)號(hào);由鏈體內(nèi)的段號(hào)可查出段地址,段地址與子位號(hào)之和就是該字符的位號(hào)。所以說,第二類字鏈編碼是間接給出區(qū)號(hào)信息,間接給出位號(hào)信息。

以下以俄文和希臘文為例。

俄文字母的編碼在4057 區(qū),將其大小寫66 個(gè)字母的編碼放在該區(qū)的第3 段(段號(hào)是253),其段地址為479,這些字母的子位號(hào)是從0 到65(先大寫后小寫)。俄文中使用的符號(hào)“控制符(0A)”“控制符(0D)”“間隔符(空格)”“-”“,”“.”等6 個(gè)符號(hào)也放在該段中,它們的子位號(hào)為66 到71。這些字母和符號(hào)在4057 區(qū)中的位號(hào)是從479到550。

與4057 區(qū)配對(duì)的第二類第4 組字鏈的鏈頭為4010(FAA)。

例7 短文『 小芹給二黑郵件“Я люблю тебя”,二黑答“Очень хорошо”,他學(xué)過俄文。』46 個(gè)字符。

郭碼第二類第4 組字鏈編碼,69 個(gè)字節(jié):

C4 19 2D 3C 83 12 46 6D 84 54 6F 37 FA AF D2 04 42 D4 02 22 D4 04 43 42 62 24 10 FA 2F 38 F4 73 12 46 62 48 F3 7F AA FD 0F 39 26 2F 3E 44 37 30 32 30 3A 30 0F A2 F3 8F 47 AC 5C A5 42 B3 01 BA 8F 2E 00 E0 0B

編碼解釋:

C41 小 92D 芹 3C8 給 312 二 466 黑 D84 郵 546件F37“ FAA 鏈頭(4010) FD 基本段段號(hào)(253)20Я 44 空格 2Dл 40ю 22б 2Dл 40ю 44 空格 34т 26е 22б 41я 0 鏈內(nèi)補(bǔ)碼 FA2 鏈尾 F38” F47,312 二 466 黑 248 答 F37“ FAA 鏈頭 FD 基本段段號(hào) 0FО 39ч 26е 2Fн 3Eь 44 空格 37х 30о 32р 30о 3Aш 30о 0 鏈內(nèi)補(bǔ)碼 FA2 鏈尾 F38” F47,AC5 他CA5 學(xué) 42B 過 301 俄 BA8 文 F2E。00E 控制符(0D)00B 控制符(0A)

第4 組字鏈鏈體的第一個(gè)字節(jié)FD(253)是基本段的段號(hào),其后面是俄文字符的1 字節(jié)編碼,是它們?cè)?53 段內(nèi)的子位號(hào)。例句中的兩句俄文恰好都是12 個(gè)字符(含空格),它們的前面都多了一個(gè)字節(jié)的“基本段的段號(hào)”,就成為了“(3N+1)型”,需要鏈內(nèi)補(bǔ)碼4 位。

例8 希臘短文『εγω ειμι ο διδασκαλοσ.』24 個(gè)字符。

在GB18030—2000 中,A6 區(qū)的A1 到B8、C1到D8 是大小寫共48 個(gè)希臘字母。這些希臘字母的編碼放在4057 區(qū)的第4 段(段號(hào)是252),子位號(hào)從0 到47,位號(hào)從718 到765。

俄文中使用的符號(hào),“空格”“-”“,”等6 個(gè)符號(hào)仍然在253 段,它們的位號(hào)也不變。

第4 組字鏈編碼35 個(gè)字節(jié):

FA AF C1 C1 A2 FF D4 41 C2 02 32 0F D4 42 6F D4 41 B2 01 B1 82 92 11 82 22 62 9F D4 7F D4 3F D4 20 FA 20

編碼解釋:

FAA 鏈頭 FC 基本段號(hào)(252)1Cε1Aγ2Fω FD 輔助段號(hào)(253)44 空格1Cε20ι 23μ 20ι FD 輔助段號(hào)(253)44 空格 26ο FD 輔助段號(hào)(253)44空格 1Bδ 20ι1Bδ 18α 29σ 21κ 18α 22λ 26ο 29σ FD輔助段號(hào)(253)47.FD 輔助段號(hào)(253)43 控制符(0D) FD 輔助段號(hào)(253) 42 控制符(0A) 0 鏈內(nèi)補(bǔ)碼 FA2 鏈尾 0 文件補(bǔ)碼

本文有18 個(gè)希臘字母(每個(gè)字母為1 字節(jié)編碼)、6 個(gè)符號(hào)(每個(gè)符號(hào)為2 個(gè)字節(jié)編碼),基本段號(hào)(FC)1 個(gè)字節(jié),共31 個(gè)字節(jié),屬于“(3N+1)型”,鏈內(nèi)補(bǔ)碼二進(jìn)制4 位。加上鏈頭、鏈尾3 個(gè)字節(jié)共34.5 個(gè)字節(jié),最后文件補(bǔ)碼二進(jìn)制4 位,總共35 個(gè)字節(jié)。

希臘字母編碼在252段,6個(gè)符號(hào)編碼在253段,該字鏈的基本段是252 段。253 段是輔助段,每個(gè)符號(hào)的編碼由輔助段號(hào)FD 和子位號(hào)組成。如果6個(gè)符號(hào)也在252 段內(nèi)編碼(253 段的編碼仍然保留),那么本鏈中的6 個(gè)輔助段號(hào)就可以省掉,編碼效率會(huì)更高。

由以上2 例可以看出,鏈內(nèi)同種字符數(shù)量增多時(shí),它們的平均碼長就接近1 個(gè)字節(jié)。

郭碼的4060 到4056 區(qū)有80 個(gè)段,基本上可以將Unicode 碼基本平面內(nèi)的小字符集的字符全部收入囊中,如果5 個(gè)區(qū)不夠用,還可以再增加。

6 第二類符鏈編碼

英文字符通過第一類符鏈編碼提高了編碼效率,一個(gè)字符的平均碼長接近1 個(gè)字節(jié),但還是比ANSI 碼的長。欲再提高英文字符的編碼效率,就要改變字符編碼的單位,充分利用變長碼原理和缺省原理。此鏈就是第二類符鏈。

第二類符鏈仍然由3 部分組成,鏈頭4013(FAD),鏈體,鏈尾4002(FA2),鏈體元素的單位是“半組元”。

“半組元”是新創(chuàng)建的單位,其長度是組元的一半,即二進(jìn)制的6 位,其能表示的數(shù)字是從0 到63,其容量為64,是組元容量的64 分之一,是字節(jié)容量的四分之一。

半組元是二進(jìn)制的6 位,用16 進(jìn)制數(shù)字表示不方便。為此,引入“4 進(jìn)制數(shù)字”,1 位4 進(jìn)制數(shù)字等效代替2 位二進(jìn)制的數(shù)字,2 位4 進(jìn)制數(shù)字等價(jià)1 位16 進(jìn)制的數(shù)字。例如,與16 進(jìn)制數(shù)字“1,6,9,C”對(duì)應(yīng)的4 進(jìn)制數(shù)字是“01,12,21,30”。

半組元可以用3 位4 進(jìn)制數(shù)字表示,如“63”(10進(jìn)制)可用4 進(jìn)制數(shù)字“333”表示。組元可以用6位4 進(jìn)制數(shù)字表示。

根據(jù)第二類符鏈編碼的需要,設(shè)置兩個(gè)數(shù)組,它們的大小均與半組元的容量相同(64)。第一個(gè)為“基本數(shù)組”,第二個(gè)為“輔助數(shù)組”。將ASCII 字符全部放到這兩個(gè)數(shù)組中,重新編碼,各組中的碼長是二進(jìn)制的6 位。使用頻度高的字符放入“基本數(shù)組”,使用頻度低的放入“輔助數(shù)組”。

從互聯(lián)網(wǎng)上查到英文字母的使用頻度列表,據(jù)此安排,基本數(shù)組中的字符有10 個(gè)阿拉伯?dāng)?shù)字、基本拉丁字母大小寫44 個(gè)(去除J j Q q X x Z z)和8 個(gè)符號(hào)“空格”“,”“.”“-”“"”“ '”(ANSI碼的20,2C,2E,2D,22,27)、控制符0D、控制符0A。它們的編碼是從0 到61。其余字符(包括J j Q q X x Z z)放入輔助數(shù)組,編碼也是從0 到61。

在鏈體中出現(xiàn)基本數(shù)組的字符時(shí),直接用它組內(nèi)的6 位碼值;出現(xiàn)輔助數(shù)組的字符時(shí),要在其碼值前面加上“63”(4 進(jìn)制的“333”),它的作用是表示其后面的6 位碼值是輔助數(shù)組的。實(shí)際上,在第二類符鏈中,基本數(shù)組中字符是6 位編碼(1個(gè)“半組元”),輔助數(shù)組中的字符是12 位編碼(2個(gè)“半組元”)。

基本數(shù)組內(nèi)字符編碼排序如下(4進(jìn)制數(shù)表示):

000 空格001 1 002 2 003 3 010 4 011 5 012 6 013 7 020 8 021 9 022 0 023 A 030 B 031 C 032 D 033 E 100 F 101 G 102 H 103 I 110 K 111 L 112 M 113 N 120 O 121 P 122 R 123 S 130 T 131 U 132 V 133 W 200 Y 201 a 202 b 203 c 210 d 211 e 212 f 213 g 220 h 221 i 222 k 223 l 230 m 231 n 232 o 233 p 300 r 301 s 302 t 303 u 310 v 311 w 312 y 313,320 .321 -322 "323 (控制符0D) 330 (控制符0A) 331 '

由于第二類符鏈鏈體中英文字符的總量是不確定的,其中有多少個(gè)是“輔助數(shù)組”的字符也不確定,為保證第二類符鏈的總長度是整數(shù)個(gè)組元,就要考慮鏈內(nèi)補(bǔ)碼。因?yàn)殒滙w元素單位是半組元,鏈體內(nèi)字符編碼的半組元個(gè)數(shù)是偶數(shù)時(shí),恰好是整數(shù)個(gè)組元,不需要補(bǔ)碼;字符編碼的半組元個(gè)數(shù)是奇數(shù)時(shí),需要鏈內(nèi)補(bǔ)碼1 個(gè)“半組元”,其值為“62”(4 進(jìn)制的“332”)。

鏈尾“FA2”是一個(gè)組元,它的4 進(jìn)制表示是“33 22 02”。若將一個(gè)組元分成前后兩個(gè)“半組元”來看,“前半個(gè)組元”是“332”,“后半個(gè)組元”是“202”。因?yàn)椤?2”(4 進(jìn)制的“332”)不作為字符編碼使用,鏈體內(nèi)的字符編碼中不可能出現(xiàn)“332”,故鏈體內(nèi)字符編碼不影響對(duì)鏈尾的搜索。

再者,若鏈體內(nèi)編碼的半組元從前往后排序(1,2,3,…),序號(hào)為奇數(shù)的是“前半個(gè)組元”,序號(hào)為偶數(shù)的是“后半個(gè)組元”。當(dāng)鏈體內(nèi)字符編碼的半組元個(gè)數(shù)為奇數(shù)時(shí),最后一個(gè)“半組元”肯定是“前半個(gè)組元”,“332”只能補(bǔ)在“后半個(gè)組元”中,故鏈內(nèi)補(bǔ)碼不會(huì)影響對(duì)鏈尾的搜索。

第二類符鏈中英文字符的平均碼長由第二類符鏈的總長度(以二進(jìn)制的“位”為單位)除以所含英文字符的數(shù)量得來。鏈內(nèi)的英文字符達(dá)到16 個(gè)時(shí)(按全部為基本數(shù)組的字符考慮),第二類符鏈的總長度是120 位,一個(gè)字符的平均碼長是7.5 位,少于ANSI 碼的8 位。鏈內(nèi)的英文字符數(shù)量越多,此一優(yōu)勢(shì)越顯著。

例9 短文『He said:"That's one small step for a men,one giant leap for mankind."』

ANSI 碼編碼73 個(gè)字節(jié)(略)。

郭碼的第二類符鏈編碼59 個(gè)字節(jié)(16 進(jìn)制):

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 進(jìn)制):

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

編碼解釋:

332 231 鏈頭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 e 000 空格 301 s 230 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 l 211 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 (控制符0D) 330 (控制符0A)332 202 鏈尾00 文件補(bǔ)碼

全文有英文字符73個(gè),只有1個(gè)字符(冒號(hào)“:”)屬于輔助數(shù)組,其編碼“333 022”為2 個(gè)“半組元”。其余字符都屬于基本數(shù)組,碼長為1 個(gè)“半組元”。

鏈體內(nèi)有“半組元”74 個(gè),不需要鏈內(nèi)補(bǔ)碼。全鏈共39 個(gè)組元(58.5 個(gè)字節(jié)),為奇數(shù),需要文件補(bǔ)碼4 位。全文編碼長59 個(gè)字節(jié)。

第二類符鏈編碼使得本例中一個(gè)英文字符的平均碼長為6.4658 位,編碼效率比ANSI 碼提高23.73%。

例10 一篇宣言

ANSI 碼文件長9655 個(gè)字節(jié)(略)。

郭碼第二類符鏈編碼文件長7313 個(gè)字節(jié)(略)。

9655 個(gè)字符中,“輔助數(shù)組”的有90 個(gè)。加上鏈內(nèi)補(bǔ)碼1 個(gè)“半組元”,鏈體共有9746 個(gè)“半組元”。再加上鏈頭、鏈尾2 個(gè)組元,第二類符鏈總共4875 個(gè)組元,為奇數(shù),故在最后“文件補(bǔ)碼”4位(二進(jìn)制)。文件長7313 個(gè)字節(jié),比ANSI 碼文件節(jié)省了2342 個(gè)字節(jié)。

郭碼英文字符平均碼長為6.0595 位,編碼效率比ANSI 碼提高了32.03%。

本例中,輔助數(shù)組中字符使用頻度為0.9322%,不足百分之一,經(jīng)過對(duì)數(shù)萬字符的英文資料測(cè)試,結(jié)果基本相同。據(jù)此估算,鏈內(nèi)的英文字符數(shù)量達(dá)到200 個(gè)以上,第二類符鏈編碼效率就會(huì)比ANSI碼提高約30%。

本節(jié)的內(nèi)容曾經(jīng)在《通信技術(shù)》2016 年第一期上發(fā)表,題目是“一種提高英文編碼效率的編碼方法”。

7 第三類字鏈編碼

小字符集中拼音文字的情況與英文相似,它們的編碼效率也可以高于ANSI 碼。為此,推出郭碼的第三類字鏈編碼。

第三類字鏈再次設(shè)定小字符集文字的編碼區(qū)域(與第二類字鏈對(duì)應(yīng)的區(qū)域不同),各組字符依次在4055、4054、4053、4052、4051 區(qū),與這些區(qū)固定配對(duì)的第三類各組字鏈的鏈頭值,依次為4014(FAE)、4015(FAF)、4016(FB0)、4017(FB1)、4018(FB2)。鏈尾值仍然是4002(FA2),鏈體內(nèi)元素的單位是“半組元”。

第三類字鏈對(duì)應(yīng)的區(qū),每一個(gè)區(qū)劃分為16 個(gè)段,每段長度為240 個(gè)位(區(qū)位碼的“位”)。每段的起始位是“段地址”,16 個(gè)段的段地址依次為1,241,481,721,961,1201,1441,1681,1921,2161,2401,2641,2881,3121,3361,3601。16個(gè)段的“段號(hào)”依次為1,2,…,16。區(qū)內(nèi)16 個(gè)段之外的空間(3841 至4000)留作備用。

段內(nèi)的“子位號(hào)”是字符的位號(hào)與段地址之差,各段“子位號(hào)”的值是從0 到239。每個(gè)段等分為4 個(gè)班組,從前往后依次為基本班組、輔助1班組、輔助2 班組、輔助3 班組。每個(gè)班組在段內(nèi)的起始位是“班組地址”,各“班組地址”依次為0,60,120,180。各個(gè)班組內(nèi)字符的子位號(hào)與班組地址之差即是字符的“班組內(nèi)編碼”(二進(jìn)制的6 位),其值為0,1,2,…,59。輔助1 班組、輔助2 班組、輔助3 班組的“班組代號(hào)”依次為63,61,60,基本班組的“班組代號(hào)”缺省。

小字符集中的一種文字放在一個(gè)段內(nèi),該文字中使用頻度最高的60個(gè)字符放入該段的基本班組,其余的字符放入各輔助班組。若該種文字的字符數(shù)超過240 個(gè),余下的、使用頻度最低的字符放到本區(qū)16 個(gè)段之外的空間(3841 至4000)或其他段中,它們不能進(jìn)入該種文字的鏈,而只能用“基本方式”編碼。

鏈體內(nèi)的第一個(gè)元素是該種文字所在段的段號(hào),其后是該段內(nèi)各字符的編碼,最后一個(gè)元素有可能是“鏈內(nèi)補(bǔ)碼”?;景嘟M的字符編碼只用“班組內(nèi)編碼”,“班組代號(hào)”缺省,碼長是1 個(gè)“半組元”。輔助班組的字符編碼包括“班組代號(hào)”和“班組內(nèi)編碼”兩部分,碼長是2 個(gè)“半組元”。

由于第三類字鏈中字符的數(shù)量是不確定的,其中有多少個(gè)“輔助班組”的字符也不確定,為保證第三類字鏈的總長度是整數(shù)個(gè)組元,就要考慮鏈內(nèi)補(bǔ)碼。因?yàn)殒滙w元素的單位是半組元,鏈體內(nèi)半組元的總數(shù)(包括段號(hào)和字符編碼)是偶數(shù)時(shí),恰好是整數(shù)個(gè)組元,不需要補(bǔ)碼;半組元總數(shù)是奇數(shù)時(shí),需補(bǔ)碼1 個(gè)“半組元”,其值為“62”(十進(jìn)制)。

字符的第三類字鏈編碼與其基本方式編碼有特殊關(guān)系。由鏈頭的值可知該字符所在的區(qū)號(hào);由段號(hào)可查到段地址,由班組代號(hào)可查到班組地址,班組內(nèi)編碼、班組地址、段地址,三者之和就是該字符的位號(hào)。“第三類字鏈”編碼包含了區(qū)位碼的全部信息。

以俄文為例說明第三類字鏈的應(yīng)用。

在第二類字鏈編碼舉俄文例子時(shí),使用的是中國標(biāo)準(zhǔn)GB18030—2000,每個(gè)字母碼長是2 個(gè)字節(jié)?,F(xiàn)在使用俄羅斯的國家標(biāo)準(zhǔn)“西里爾文windows”,它也屬于ANSI 碼體系,西里爾文字母及符號(hào)占用首字節(jié)的后半段(128 到255),是1字節(jié)編碼。中國標(biāo)準(zhǔn)GB18030—2000 和俄羅斯的國家標(biāo)準(zhǔn)“西里爾文windows”同屬ANSI 體系,它們不可以在同一純文本文件中使用。

設(shè)俄文字母及部分ASCII 字符編碼在4052 區(qū)的第3 段,固定配對(duì)的第三類第4 組字鏈的鏈頭為4017(FB1)。

由于研究條件所限,在互聯(lián)網(wǎng)上沒有找到俄文字母使用頻度的資料,就自己編寫程序,對(duì)數(shù)萬字符的俄文文章進(jìn)行統(tǒng)計(jì),得出俄文字符使用頻度的數(shù)據(jù),做出了以下安排。

基本班組內(nèi)放使用頻度最高的60 個(gè)字符,它們是西里爾字母53 個(gè):

其余的俄文字母和ASCII 字符放入輔助1 班組、輔助2 班組、輔助3 班組。

例11 短文『Факты -упрямая вещь.』

俄羅斯國家標(biāo)準(zhǔn)編碼23 個(gè)字節(jié):

D4 E0 EA F2 FB 20 96 20 F3 EF F0 FF EC E0 FF 20 E2 E5 F9 FC 2E 0D 0A

第三類第4 組字鏈編碼23 個(gè)字節(jié)(16 進(jìn)制):

FB 10 FF 01 88 AA C7 7F CD DE B9 E8 D2 46 34 DD A7 70 CB BD B5 FA 20

4 進(jìn)制數(shù)表示:

3323 0100 3333 0001 2020 2222 3013 1333 3031 3132 2321 3220 3102 1012 0310 3131 2213 1300 3023 2331 2311 3322 0200

編碼解釋:

332 301 第4 組字鏈鏈頭(FB1) 003 段號(hào) 333 000 Ф 120 а202к222 т301ы 313 空格333 031–313 空格223 у213п220р310 я210м 120 а310 я313 空格122в131е 300 щ 302ь323.312 (控制符0D) 311 (控制符0A)332 202 鏈尾 00 文件補(bǔ)碼

全文共23 個(gè)字符,21 個(gè)屬于基本班組,2個(gè)屬于輔助1 班組。班組代號(hào)333,班組內(nèi)編碼000,字母Ф;班組代號(hào)333,班組內(nèi)編碼031,符號(hào)“–”。算上段號(hào),鏈體有26 個(gè)“半組元”,即13 個(gè)組元,不需要鏈內(nèi)補(bǔ)碼。再考慮鏈頭、鏈尾,字鏈長15 個(gè)組元,是奇數(shù),故最后有文件補(bǔ)碼二進(jìn)制4 位。

郭碼文件長度也是23 個(gè)字節(jié),純屬巧合,第三類字鏈的字符平均碼長是二進(jìn)制的8 位。

例12 網(wǎng)上下載的一段文章

俄國標(biāo)準(zhǔn)“西里爾文windows”單字節(jié)編碼,全文共6809 個(gè)字節(jié)(略)。

第三類第4 組字鏈編碼5225 個(gè)字節(jié)(略)。

全文有字符6809 個(gè),其中151 個(gè)是輔助班組的,鏈體中段號(hào)及字符編碼共有6961 個(gè)“半組元”,為奇數(shù),鏈內(nèi)補(bǔ)碼。鏈體共有6962 個(gè)“半組元”,即3481 個(gè)組元。再加上鏈頭、鏈尾2 個(gè)組元,全鏈共有3483 個(gè)組元,為奇數(shù),文件補(bǔ)碼二進(jìn)制4 位,故文件長5225 個(gè)字節(jié)。

本例中,基本班組字符的使用頻度為97.78%,輔助班組字符使用頻度為2.22%。郭碼第三類字鏈編碼的字符平均碼長6.1389 位,比ANSI 碼(西里爾文windows)提高編碼效率30.32%。

中國漢字和英文字符的使用頻度數(shù)據(jù)比較權(quán)威,俄文字符使用頻度是筆者自己統(tǒng)計(jì)的,由于統(tǒng)計(jì)對(duì)象數(shù)量不夠多,頻度數(shù)據(jù)誤差可能大一些。

例13 由俄文、希臘文、漢文、日文、英文5種文字構(gòu)成的短文

國際標(biāo)準(zhǔn)(Unicode)編碼“FE FF 04 24 04 30 04 3A 04 42…… 00 20 00 6D 00 65 00 6E 00 2E ”,196 個(gè)字節(jié)。最前面的兩個(gè)字節(jié)是Unicode 碼的標(biāo)識(shí)符,其后面是各個(gè)字符的碼值,每個(gè)字符碼長都是2 個(gè)字節(jié)。

中國標(biāo)準(zhǔn)(GB18030—2000)編碼(略),154個(gè)字節(jié),其中英文字符碼長是1 個(gè)字節(jié),其他文字字符碼長都是2 個(gè)字節(jié)。

郭碼編碼“FB 10 FF 01 88 AA C7 7F CD DE B9 E8 D2 46 34 DD A7 70 CB BF A2 FB 11 1C 6A FD DC 82 38 37 9B 76 E0 6D 8A 61 62 29 A9 EF EF A2 D1 76 80 EA E9 CB C4 1F A3 11 31 42 12 51 15 0F A1 0D 11 51 09 11 E1 1D 12 51 20 0F A1 1D 10 D1 3D 0F CF A2 FA D7 28 87 2F 71 02 EB 65 03 1B 21 AE B0 31 CA 5B C0 9A EC 00 84 0B 25 B7 8F A2”,105 個(gè)字節(jié)。

編碼解釋(4 進(jìn)制數(shù)):

俄文和希臘文使用第三類字鏈編碼,它們同在第4 組字鏈,俄文在第3 段,希臘文在第4 段。中國漢字使用缺省方式編碼。日文使用第一類字鏈編碼。英文使用第二類符鏈編碼。

寫作本文使用的文字處理軟件執(zhí)行國家標(biāo)準(zhǔn)GB18030—2000,由于該標(biāo)準(zhǔn)中包括了俄文字符、希臘文字符和日文假名(都是2 字節(jié)編碼),所以它可以對(duì)本例編碼。如果俄文、希臘文、日文都使用本國標(biāo)準(zhǔn)編碼(同屬ANSI 碼體系),它們是不可以同時(shí)使用的,也就不可以出現(xiàn)在同一個(gè)純文本文件(txt)中。例如,俄國標(biāo)準(zhǔn)字母“щ”的碼值是F9,希臘國家標(biāo)準(zhǔn)字母“ω”的碼值也是F9。

由于研究方法的不斷改進(jìn),就出現(xiàn)了后者超越前者的情況,對(duì)英文字符的編碼第一類符鏈就沒有第二類符鏈效率高,前者一般情況下就不太使用了。第一類符鏈奠定了鏈?zhǔn)骄幋a的基本框架,很重要。

對(duì)小字符集文字的編碼,第三類字鏈比第二類字鏈編碼效率高。小字符集包括了幾十種文字,許多種文字的使用規(guī)律和特點(diǎn)還不很清楚,還可能有難以預(yù)料的情況,故第二類字鏈的有關(guān)數(shù)據(jù)暫時(shí)還要保留。

8 拓展功能

郭碼的數(shù)據(jù)結(jié)構(gòu)決定了它有巨大的空間,開發(fā)了7 種編碼方法之后,還有組元值4019 至4050 沒有使用。如果它們?nèi)坑米鲄^(qū)號(hào),區(qū)位碼的空間就有128000 個(gè),這些都是可資利用的資源。

僅舉一例,如果設(shè)4050 區(qū)為“短語編碼”專區(qū),就可以為4000 個(gè)短語編碼。例如,設(shè)短語“中華人民共和國”的區(qū)位碼是“4050 1”,短語“Universal Multiple-Octet Coded Character Set”的區(qū)位碼是“4050 201”,等等。

如此一來,用一個(gè)2 組元的區(qū)位碼就可以傳遞一個(gè)短語的全部信息,編碼效率得到大幅度的提升。

空置空間為開發(fā)更多新功能提供了可能,具體能夠拓展出什么新功能,那要由想象力來決定。

9 結(jié)語

ANSI 碼和Unicode 碼已經(jīng)使用了幾十年,只要以字節(jié)為編碼單位的模式不改變,提高文字編碼效率的研究就沒有出路。郭碼根據(jù)國際上文字使用情況創(chuàng)建了新的編碼單位——“組元”和“半組元”,由于操作空間變寬闊了,使得“缺省原理”和“變長碼原理”得到了廣泛應(yīng)用,為提高文字編碼效率奠定了基礎(chǔ)。

ANSI 碼和Unicode 碼將一個(gè)個(gè)字符看作互不相關(guān)的個(gè)體,它們是對(duì)“個(gè)體”編碼,一篇文章的編碼僅僅是各個(gè)字符碼值的簡單排列。筆者研究了文字使用規(guī)律,發(fā)現(xiàn)同一種文字的字符之間有密切關(guān)系,就推出了多種鏈?zhǔn)骄幋a,郭碼將同一種文字的字符做“集體”編碼,從而發(fā)揮了規(guī)模效應(yīng)。

ANSI 碼和Unicode 碼中,一個(gè)字符的碼值是唯一的、固定不變的。郭碼中,一些字符在不同的編碼方式中有不同的碼值,它在文章中某處出現(xiàn)時(shí)應(yīng)該采用哪種方式編碼,需要由文字處理軟件根據(jù)上下文的情況來決定,這就需要此個(gè)與郭碼配套的文字處理軟件應(yīng)具有一定的“智能”。

郭碼的基本方式編碼碼長為2 個(gè)組元(3 個(gè)字節(jié)),相比ANSI 碼是“低效”的,這是小概率事件;缺省方式和鏈?zhǔn)骄幋a能比ANSI 碼“高效”,是大概率事件,所以總體上郭碼比ANSI 碼編碼效率高。

理論上,郭碼豐富了信息論中信源編碼的方法和理念。

幾十年來,科學(xué)技術(shù)發(fā)展迅速,信息的存儲(chǔ)成本越來越低,計(jì)算機(jī)與通信網(wǎng)的速度越來越快,郭碼編碼效率高帶來的經(jīng)濟(jì)效益漸漸被淡化,對(duì)個(gè)人來講,這個(gè)效益是微不足道的,但對(duì)全球幾十億的用戶而言,這個(gè)經(jīng)濟(jì)效益的總量還是相當(dāng)可觀的。

猜你喜歡
字符字節(jié)編碼
生活中的編碼
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
《全元詩》未編碼疑難字考辨十五則
論高級(jí)用字階段漢字系統(tǒng)選擇字符的幾個(gè)原則
子帶編碼在圖像壓縮編碼中的應(yīng)用
字符代表幾
一種USB接口字符液晶控制器設(shè)計(jì)
圖片輕松變身ASCⅡ藝術(shù)畫
No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
Genome and healthcare
教育| 陵川县| 浏阳市| 龙陵县| 兴海县| 甘肃省| 化州市| 文水县| 泰安市| 大方县| 衡山县| 察哈| 东平县| 射洪县| 新营市| 兰西县| 怀宁县| 莱西市| 方城县| 阳春市| 湘阴县| 保康县| 荣成市| 青浦区| 胶州市| 巩留县| 汤阴县| 麦盖提县| 米脂县| 上杭县| 通渭县| 繁昌县| 紫阳县| 昌图县| 台前县| 庆阳市| 周宁县| 大英县| 尼木县| 元阳县| 巫溪县|