|
中文與英文用ASCII碼一個(gè)字節(jié)表示不同,它使用兩個(gè)字節(jié)來(lái)表示。事實(shí)上,在文本文件中保存的就是每個(gè)漢字對(duì)應(yīng)的兩個(gè)字節(jié)編碼,而顯示問(wèn)題由中文操作系統(tǒng)自動(dòng)解決。 漢字編碼并不統(tǒng)一,我們使用的是GB碼,而臺(tái)灣地區(qū)使用的是BIG5碼。BIG5碼文件中保存的是漢字相應(yīng)的BIG5編碼,GB碼文件中保存的是漢字相應(yīng)的GB編碼。所以轉(zhuǎn)換工作的關(guān)鍵是有一個(gè)記錄每個(gè)BIG5編碼對(duì)應(yīng)GB編碼的碼表文件。 GB碼編碼規(guī)則是這樣的:每個(gè)漢字由兩個(gè)字節(jié)構(gòu)成,第一個(gè)字節(jié)的范圍從0XA1-0XFE,共96種。第二個(gè)字節(jié)的范圍分別為0XA1-0XFE,共96種。利用這兩個(gè)字節(jié)共可定義出 96 * 96=8836種漢字。實(shí)際共有6763個(gè)漢字。 BIG5碼編碼規(guī)則是這樣的:每個(gè)漢字由兩個(gè)字節(jié)構(gòu)成,第一個(gè)字節(jié)的范圍從0X81-0XFE,共126種。第二個(gè)字節(jié)的范圍分別為0X40-0X7E,0XA1-0XFE,共157種。也就是說(shuō),利用這兩個(gè)字節(jié)共可定義出 126 * 157=19782種漢字。這些漢字的一部分是我們常用到的,如一、丁,這些字我們稱為常用字,其BIG5碼的范圍為0XA440-0XC671,共5401個(gè)。較不常用的字,如濫、調(diào),我們稱為次常用字,范圍為 0XC940-0XF9FE,共7652個(gè),剩下的便是一些特殊字符。 制作碼表文件的原理是這樣的:首先將所有的GB編碼寫(xiě)入一個(gè)文件,然后,使用具有GB碼到BIG5碼轉(zhuǎn)換功能的軟件,如UCDOS下的CONVERT.EXE,將文件轉(zhuǎn)換為BIG5碼文件,即得到碼表文件。 下面的程序可將全部國(guó)標(biāo)碼寫(xiě)入文件gb.txt(以下全部程序用foxpro書(shū)寫(xiě),可很容易的轉(zhuǎn)換成其他語(yǔ)言)
fp = fopen("gb.txt",2) for i=161 to 247 for j=161 to 254 =fwrite(fp,chr(i)+chr(j)) next =fwrite(fp,chr(13)+chr(10)) next =fwrite(fp,chr(26)) =fclose(fp)
文件的組織形式:行對(duì)應(yīng)編碼的第一字節(jié),列對(duì)應(yīng)編碼的第二字節(jié)。使用時(shí)請(qǐng)注意編碼的偏移量,如漢字“啊”GB編碼0xb1a1第一字節(jié)0xb1(177)第二字節(jié)0xa1(161)所以他應(yīng)該在文件的第(177-161=16)行第((161-161)*2=0)列。 運(yùn)行CONVERT.EXE將gb.txt轉(zhuǎn)換成BIG5碼的文件,這樣就可得到按GB碼組織的BIG5碼表文件big5.txt。反之亦可得到按BIG5碼組織的GB碼表文件。
轉(zhuǎn)換的思路是這樣的:(用foxpro書(shū)寫(xiě)) 首先將碼表文件裝入數(shù)組 fp = fopen("big5.txt") i = 0 do while feof(fp) i = i+1 dime dict[i] dict[i] = fgets(fp) enddo =fclose(fp) 其次將待轉(zhuǎn)換的文本裝入變量 create cursor temp (mm m) append blank append memo mm from textfilename text = mm 然后掃描文本,替換所有的GB編碼 temp = "" i = 1 do while i < len(text) ch = substr(text,i,1) if isascii(ch) && 若是ASCII碼 temp = temp+ch i = i+1 else ch1 = substr(text,i+1,1) big5 = substr(dict[asc(ch)-161+1],(asc(ch1)-161)*2+1,2) temp = temp+big5 i = i+2 endif enddo 最后將在temp中得到轉(zhuǎn)換后的文本
需要注意的是,在foxpro中數(shù)組指針是以1開(kāi)始,substr函數(shù)的起始位>=1。 foxpro大家應(yīng)該都會(huì),看得懂的。轉(zhuǎn)換好的big5.txt(17k)無(wú)法張貼。如有需要,請(qǐng)與我聯(lián)系。email: czjsz_ah@stats.gov.cn
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!