我們知道,計(jì)算機(jī)是西方人首先發(fā)明和使用的,他們理所當(dāng)然地解決了拼音文字在計(jì)算機(jī)上的處理問題。而漢字是世界上惟一正在使用的表意文字,數(shù)量眾多,如何在計(jì)算機(jī)上處理好漢字是對(duì)這一古老文化的挑戰(zhàn)。計(jì)算機(jī)漢字處理技術(shù),對(duì)推廣我國(guó)計(jì)算機(jī)應(yīng)用及加強(qiáng)國(guó)際交流有著十分重要的現(xiàn)實(shí)意義。
在計(jì)算機(jī)上處理漢字要比處理西文字符復(fù)雜得多,處理漢字首先要確定漢字編碼字符集的問題,并要解決漢字的輸入、傳輸、存儲(chǔ)、顯示、輸出等一系列問題。在處理過程中每一個(gè)環(huán)節(jié)需要各自不同的編碼,因此產(chǎn)生了漢字編碼系統(tǒng)和漢字處理技術(shù),也即計(jì)算機(jī)中的漢字編碼中稱之為的內(nèi)碼和外碼。
一、關(guān)于內(nèi)碼
內(nèi)碼是指存儲(chǔ)在計(jì)算機(jī)內(nèi)的相關(guān)漢字編碼,以供外碼所調(diào)用或提取。計(jì)算機(jī)中的漢字編碼中的內(nèi)碼,通常涉及到的類型是區(qū)位碼、交換碼(也有稱國(guó)標(biāo)碼)及機(jī)內(nèi)碼等。之所以涉及到這些編碼,是因?yàn)樵缙趯?duì)字符集編碼時(shí)采用的編碼方式不同,由早期的7位編碼過渡到后期的8位編碼,導(dǎo)致了7位編碼與8位編碼的共存,就涉及到它們間的兼容問題。另外,漢字字形碼和漢字地址碼也屬于內(nèi)碼的類型。
1、區(qū)位碼
“區(qū)位碼”的來(lái)歷源自于我國(guó)發(fā)布的第一個(gè)漢字編碼字符集GB/T 2312-1980《信息交換用漢字編碼字符集 基本集》。漢字編碼字符集是用于漢字信息處理、漢字通信等系統(tǒng)之間的信息交換。該字符集是對(duì)我國(guó)最常用的6763個(gè)漢字進(jìn)行二進(jìn)制編碼,采用雙字節(jié)編碼表示。其中,前面的字節(jié)為第一字節(jié),后面的為第二字節(jié),它們構(gòu)成一個(gè)94×94的二維平面,即分成94行,94列,行號(hào)稱為區(qū)號(hào),從1~94編號(hào),由第一字節(jié)標(biāo)識(shí);列號(hào)稱為位號(hào),也是從1~94編號(hào),由第二字節(jié)標(biāo)識(shí)。每一個(gè)漢字或圖形符號(hào)在碼表中都有各自的位置,字符的位置用它所在的區(qū)號(hào)(行號(hào))及位號(hào)(列號(hào))來(lái)表示,如下表1-1所示。因此,稱之為漢字的區(qū)位碼。區(qū)位碼是漢字在計(jì)算機(jī)存儲(chǔ)與交換的唯一數(shù)字代碼,如漢字“大”的區(qū)號(hào)是20,位號(hào)是83,它的區(qū)位碼是20-83,用雙字節(jié)二進(jìn)制碼表示為00010100 01010011。
表 1-1:GB/T 2312-1980字符集的區(qū)位構(gòu)成
欲詳細(xì)了解GB/T 2312-1980標(biāo)準(zhǔn)具體規(guī)定內(nèi)容的請(qǐng)進(jìn)入。
然而,在該漢字編碼字符集(GB/T 2312-1980)中不僅對(duì)6763個(gè)漢字設(shè)置了區(qū)位碼,同時(shí)還對(duì)682個(gè)非漢字圖形字符(也稱圖形符號(hào)),其中包括有ASCII字符集中的圖形符號(hào),被置于1~9區(qū)(漢字圖形字符是置于16~87區(qū)的),而在這里,這些圖形符號(hào)是按照GB/T 2311-80(ISO/IEC 2022)規(guī)定的7位編碼擴(kuò)充方法,原ASCII字符集(ISO/IEC 646,等同采用為國(guó)內(nèi)標(biāo)準(zhǔn)是GB/T 1988-80)中是采用7位編碼的(目前在計(jì)算機(jī)內(nèi)的ASCII中的圖形字符就是7位編碼)。這就有可能存在7位編碼擴(kuò)充與7位編碼的沖突的問題。
欲詳細(xì)了解ASCII編碼字符集介紹的請(qǐng)進(jìn)入。
需要指出的是:區(qū)位碼源自于GB/T 2312,原因是它采用了區(qū)位編碼方式。然而我國(guó)目前使用的權(quán)威漢字字符集是GB 18030《信息技術(shù) 中文編碼字符集》。它采用的是單字節(jié)、雙字節(jié)和四字節(jié)多字節(jié)編碼方式,其中雙字節(jié)編碼部分包含了GB/T 2312所編碼的圖形字符(漢字和符號(hào)),關(guān)鍵是其雙字節(jié)編碼已不再采用94×94的區(qū)與位方式編碼了。
欲詳細(xì)了解GB 18030中文編碼字符集的請(qǐng)進(jìn)入。
2、交換碼(國(guó)標(biāo)碼)
相對(duì)于區(qū)位碼,為了避免與ISO 2022中用于通信的控制字符(0x00~0x1F)和空格字符(0x20)發(fā)生沖突,每個(gè)漢字的區(qū)號(hào)和位號(hào)必須分別加上32(即二進(jìn)制0010 0000)。經(jīng)過這樣處理得到的代碼稱為漢字的“交換碼”。因此,“大”字的交換碼是:00110100 01110011。
也就是說(shuō),交換碼(國(guó)標(biāo)碼)相當(dāng)于將區(qū)位碼向后偏移了32,以避免與ASCII字符中的控制符號(hào)(具有數(shù)據(jù)的控制功能,不可顯示的符號(hào)字符,包括空格字符)相沖突。之所以如此,是因?yàn)?/span>GB/T 2312沒有對(duì)ASCII字符中的33個(gè)具有控制功能的符號(hào)進(jìn)行重新編碼。為什么是后偏移了32而不是33,這是因?yàn)閰^(qū)位碼中的區(qū)編號(hào)和位編號(hào)都是從1開始計(jì)數(shù)的,不像ASCII碼是從0開始計(jì)數(shù)的。
3、機(jī)內(nèi)碼
當(dāng)區(qū)位碼變換為交換碼(國(guó)標(biāo)碼)后,仍然不能在計(jì)算機(jī)內(nèi)使用(存儲(chǔ))。因?yàn)?/span>文本中的漢字字符與西文字符經(jīng)常混合在一起使用,漢字信息如不予以特別的標(biāo)識(shí),它與單字節(jié)的標(biāo)準(zhǔn)ASCII碼就會(huì)混淆不清。還有因?yàn)閲?guó)標(biāo)碼雖然相較于區(qū)位碼避開了ASCII碼中(0~32的前33個(gè)控制字符),但并沒有避開ASCII碼中的英文字母、數(shù)字和符號(hào)等可顯示可打印的圖形字符(33~126,共94個(gè)字符)。
于是,常采用的方法之一就是把一個(gè)漢字看成兩個(gè)擴(kuò)展ASCII碼,使表示GB 2312漢字的兩個(gè)字節(jié)的最高位都等于“1”。相當(dāng)于每個(gè)字節(jié)都再加上128(即二進(jìn)制的1000 0000;十六進(jìn)制的0x80)。這種高位為“1”的雙字節(jié)(16位)漢字編碼就稱為GB 2312漢字的“機(jī)內(nèi)碼”,有時(shí)簡(jiǎn)稱內(nèi)碼。目前,這種表示方式已經(jīng)成為GB 23122漢字內(nèi)碼的一種事實(shí)上的標(biāo)準(zhǔn)。上面所說(shuō)的“大”字的機(jī)內(nèi)碼是:10110100 11110011(B4F3)。
下式和下圖1-3給出了區(qū)位碼、交換碼與機(jī)內(nèi)碼間的關(guān)系,以供參考。
機(jī)內(nèi)碼 = 交換碼 + 128(0x80)= 區(qū)位碼 + 32(0x20)+ 128(0x80)= 區(qū)位碼 + 160(0xA0)
圖 1-3:區(qū)位碼、交換碼與機(jī)內(nèi)碼間的關(guān)系
4、其它內(nèi)碼:字形碼、漢字地址碼
漢字字形碼和漢字地址碼也都是屬于存儲(chǔ)在計(jì)算機(jī)內(nèi)的漢字編碼,用以漢字的輸出(即顯示、打印等)。
字形碼就是表示漢字字形信息(結(jié)構(gòu)、形狀、比畫等)的編碼,它的實(shí)現(xiàn)方法通常分為點(diǎn)陣形式和矢量形式,點(diǎn)陣形式是日常使用較多的形式,此時(shí),字形碼是確定一個(gè)漢字字形點(diǎn)陣的代碼,也叫字模或漢字輸出碼。字形碼就是這個(gè)漢字字形的點(diǎn)陣代碼根據(jù)顯示或打印質(zhì)量的要求,漢字字形編碼就有16×16,24×24,32×32,48×48等不同密度的點(diǎn)陣編碼。點(diǎn)數(shù)越多,顯示或打印的字體就越美觀,但編碼占用的存儲(chǔ)空間也越大。如16×16點(diǎn)陣的字形碼表示漢字是16行,每行16個(gè)點(diǎn),一個(gè)點(diǎn)需要1位二進(jìn)制代碼,16個(gè)點(diǎn)需用16位二進(jìn)制代碼(即2個(gè)字節(jié)),共16行,所以需要16行×2字節(jié)/行=32字節(jié),即16×16點(diǎn)陣表示一個(gè)漢字,字形碼需用32字節(jié)。
當(dāng)一個(gè)漢字需要輸出(顯示或打印)時(shí),需要將漢字的機(jī)內(nèi)碼(如上述)轉(zhuǎn)換成字形編碼。漢字的字形點(diǎn)陣要占用大量的存儲(chǔ)空間,通常將所有漢字字形編碼集中存放在計(jì)算機(jī)的外存儲(chǔ)卡(器)中,稱為“字庫(kù)”,不同字體(如宋體、楷體等)對(duì)應(yīng)不同的字庫(kù)。需要時(shí)才到字庫(kù)中檢索漢字并輸出,為避免大量占用寶貴的內(nèi)存空間,又要提高漢字的處理速度,通常將漢字字庫(kù)分為一級(jí)和二級(jí),一級(jí)字庫(kù)在內(nèi)存,二級(jí)字庫(kù)在外存。
我國(guó)發(fā)布有大量的關(guān)于點(diǎn)陣字形碼的編碼國(guó)家標(biāo)準(zhǔn)(GB/T)及電子行業(yè)標(biāo)準(zhǔn)(SJ/T),這些標(biāo)準(zhǔn)是針對(duì)不同漢字字體、不同點(diǎn)陣、不同漢字字符集(如GB/T 2312、GB/T 13000、GB 18030等)而進(jìn)行編碼規(guī)范的。如GB/T 25899.1-2019《信息技術(shù) 通用編碼字符集(基本多文種平面) 漢字32點(diǎn)陣字型 第1部分:宋體》,它規(guī)定的是GB/T 13000字符集和GB 18030字符集中的漢字的32點(diǎn)陣宋體字型,舉例“永”字的示意圖如下圖1-4所示。
圖 1-4:32點(diǎn)陣漢字“永”的宋體字型示意圖
由上述字形碼介紹可知,字形碼是存放在外存儲(chǔ)器里,每一個(gè)字模都有自己的存放地址,以便計(jì)算機(jī)提取字模之用。確定字形碼地址的二進(jìn)制編碼就是漢字地址碼。
二、關(guān)于外碼:漢字輸入碼
對(duì)于計(jì)算機(jī)上漢字編碼的外碼,主要是指計(jì)算機(jī)漢字輸入碼。計(jì)算機(jī)使用者通過漢字輸入碼將漢字輸入到計(jì)算機(jī)中進(jìn)行漢字信息的處理。我們知道,計(jì)算機(jī)輸入漢字的方法主要有兩種途徑:一種是自動(dòng)識(shí)別輸入,包括漢字的自動(dòng)識(shí)別和漢語(yǔ)言語(yǔ)的自動(dòng)識(shí)別;另一種就是漢字鍵盤輸入。而漢字鍵盤輸入則是人們常用的方法,這里重點(diǎn)介紹計(jì)算機(jī)鍵盤輸入編碼。
計(jì)算機(jī)鍵盤是由西方人根據(jù)西方文字的特點(diǎn)而設(shè)計(jì),已經(jīng)成為標(biāo)準(zhǔn)鍵盤,或稱通用鍵盤。那么對(duì)于漢字的鍵盤輸入,只有在該通用鍵盤上,結(jié)合漢字的特點(diǎn)(部首、部件、筆順、注音),通過編碼將鍵盤上相應(yīng)的按鍵一一對(duì)應(yīng),而轉(zhuǎn)換(調(diào)用或提取)成計(jì)算機(jī)中的漢字內(nèi)碼(區(qū)位碼及機(jī)內(nèi)碼)。因此,漢字鍵盤輸入碼的作用:一是利用漢字的形、音及其它相關(guān)信息把通用鍵盤相應(yīng)鍵位(一個(gè)或一組)的綁定;二是建立與計(jì)算機(jī)中相應(yīng)漢字機(jī)內(nèi)碼的對(duì)應(yīng)關(guān)系。
漢字鍵盤輸入碼,對(duì)于計(jì)算機(jī)使用者來(lái)講,重點(diǎn)是要掌握漢字信息與鍵位的對(duì)應(yīng)方法,這就要漢字鍵盤輸入碼的編碼方法易學(xué)易用。而我們?nèi)粘3S玫妮斎刖幋a方法有:數(shù)字編碼、字音(拼音)編碼(如全拼輸入法、雙拼輸入法等)、字形(部首、筆畫及部件)編碼(如五筆輸入法、筆畫輸入法等)、字音字形結(jié)合編碼、智能編碼等等,它們各自的特點(diǎn)詳見于下表2中。
表 2:常用漢字鍵盤輸入編碼方法的特點(diǎn)
由于篇幅問題,這里不對(duì)每種漢字鍵盤編碼輸入法進(jìn)行介紹。關(guān)鍵是,我國(guó)國(guó)家標(biāo)準(zhǔn)GB/T 19246《信息技術(shù) 通用鍵盤漢字輸入通用要求》規(guī)定了信息技術(shù)產(chǎn)品中用通用鍵盤進(jìn)行漢字輸入時(shí)的通用要求,適用于基于通用鍵盤進(jìn)行漢字輸入的漢字輸入法編碼方案、漢字輸入技術(shù)及其產(chǎn)品。對(duì)于上述提到的各種漢字編碼輸入法均應(yīng)滿足GB/T 19246規(guī)定的要求,包括總體性能要求(易學(xué)性、平均碼長(zhǎng)、重碼字詞鍵選率)、鍵位設(shè)置要求、編碼字匯(漢字編碼字符集)要求、編碼規(guī)范( 漢字部首序與筆順序及部件規(guī)范、拼音規(guī)范等)等等。
欲詳細(xì)了解GB/T 19246標(biāo)準(zhǔn)具體要求的請(qǐng)進(jìn)入。
三、說(shuō)明
由于我國(guó)的漢字是一種表意文字,因此其數(shù)量巨大,僅2022年版GB 18030中收納編碼的漢字的數(shù)量就達(dá)87887個(gè),如此之多的漢字計(jì)算機(jī)的信息處理(包括輸入、存儲(chǔ)、交換、傳輸、顯示及輸出等)是一個(gè)龐大的系統(tǒng)工程,因此需要其計(jì)算機(jī)漢字編碼系統(tǒng),包括其相應(yīng)的內(nèi)碼和外碼的建立、結(jié)合和使用,下圖3示意了計(jì)算機(jī)漢字編碼系統(tǒng)的一個(gè)總體關(guān)系結(jié)構(gòu),亦可以了解其內(nèi)碼和外碼的關(guān)系。
圖 3:計(jì)算機(jī)漢字編碼系統(tǒng)總體關(guān)系結(jié)構(gòu)示意圖
另外,上述主要介紹的是計(jì)算機(jī)漢字的編碼,因?yàn)闈h字字符是重點(diǎn)。事實(shí)上,全面的說(shuō),應(yīng)稱為計(jì)算機(jī)中文的編碼,因?yàn)樗寻丝娠@示/可打印的圖形符號(hào)字符(標(biāo)點(diǎn)符號(hào)、字母符號(hào)、數(shù)字及序號(hào)符號(hào)等等);同時(shí)包括我國(guó)少數(shù)民族的文字字符。
欲進(jìn)一步了解我國(guó)字符編碼字符集介紹的請(qǐng)進(jìn)入。