專(zhuān)利名稱(chēng):文字編碼轉(zhuǎn)換的方法
技術(shù)領(lǐng)域:
本發(fā)明是關(guān)于一種文字譯碼編碼的方法,尤其是一種利用函數(shù)譯碼編 碼文字使輸出裝置不會(huì)打印或顯示出亂碼的方法。
背景技術(shù):
由于歷史、地區(qū)原因,時(shí)常在同一種文字中會(huì)出現(xiàn)多種編碼方案。而 在計(jì)算機(jī)系統(tǒng)中,如果文字編碼與系統(tǒng)預(yù)設(shè)編碼不同,將使得文字不能正 確地打印及顯示,必須將文字進(jìn)行編碼轉(zhuǎn)換才能變成可以辨識(shí)的字符。早期的計(jì)算機(jī)系統(tǒng)發(fā)源于美國(guó),因此最早的編碼系統(tǒng)也是發(fā)源于此。由于他們的數(shù)據(jù)只需數(shù)字、26個(gè)英文字母(包括大小寫(xiě))、標(biāo)點(diǎn)及其它特 殊符號(hào)、外加一些計(jì)算機(jī)系統(tǒng)的句柄即可,因此當(dāng)時(shí)一個(gè)字節(jié)的大小只需 7個(gè)位即可包含所有所需的信息,總共可容納128個(gè)符號(hào),這也就是大家 所熟知的ASCII編碼。然而對(duì)于歐洲語(yǔ)系而言,7個(gè)位的編碼空間不符合所需,因?yàn)槌?6 個(gè)英文字母外,歐洲許多國(guó)家還需要拉丁字母、特殊字母的上下標(biāo)及其它 符號(hào)等,才能完整表示他們的語(yǔ)言。因此原來(lái)的編碼系統(tǒng)必須再擴(kuò)充,由 7個(gè)位變?yōu)?個(gè)位,以容納那些多出的符號(hào),這就是IS08859的編碼標(biāo)準(zhǔn)。然而到了亞洲地區(qū),上述的8位編碼又不夠用了。因?yàn)閬喼薜貐^(qū)不再 是拼音文字,因此多出了成千上萬(wàn)個(gè)符號(hào),我們己無(wú)法仿照當(dāng)初IS08859 的做法,設(shè)計(jì)出屬于中文的部分。唯一的作法只有合并幾個(gè)位來(lái)共同表示 一個(gè)符號(hào),如此才有足夠的空間來(lái)容納一個(gè)地區(qū)所有的文字。例如我們繁 體中文最常見(jiàn)的BIG5編碼,就是將兩個(gè)字節(jié)合起來(lái)看成一個(gè)字。但當(dāng)一 份文件中同時(shí)要有中英文時(shí),意味著我們要有一個(gè)規(guī)則可以區(qū)分這個(gè)字節(jié) 應(yīng)該視為ASCII碼,或者它與它的下一個(gè)字節(jié)應(yīng)合起來(lái)視為一個(gè)BIG5碼。然而在某些場(chǎng)合下,我們?nèi)孕枰谕环菸募杏涗浂鄧?guó)文字。以 BIG5編碼為例,它可以確保中文字與ASCII碼可以同時(shí)存在,不至于混 肴。但如果我們要同時(shí)表示中文、日文、韓文到多國(guó)語(yǔ)文,則因每種文字
的編碼方式不同,將會(huì)變?yōu)閬y碼顯示。例如,當(dāng)我們欲使用打印機(jī)打印出 一份韓文文件時(shí),會(huì)因一般計(jì)算機(jī)中所使用的是微軟繁體中文操作系統(tǒng)(Windows OS),以及數(shù)據(jù)庫(kù)中的內(nèi)碼不同于韓文內(nèi)碼,而導(dǎo)致在繁體環(huán) 境下內(nèi)碼錯(cuò)亂。又,部分使用者所使用的軟件,會(huì)自動(dòng)將多國(guó)語(yǔ)文轉(zhuǎn)成其 它編碼方式,也會(huì)導(dǎo)致打印機(jī)無(wú)法正確辨識(shí)多國(guó)語(yǔ)文的編碼,導(dǎo)致只能打 印出亂碼。因此,本發(fā)明將公開(kāi)一種文字編碼轉(zhuǎn)換的方法,使輸出裝置(例如 打印機(jī))能將各國(guó)文字順利打印或顯示的方法,避免因編碼方式的不同而 無(wú)法正常打印或顯示各國(guó)文字。發(fā)明內(nèi)容本發(fā)明的目的在于利用所編寫(xiě)的程序,使計(jì)算機(jī)在其任何一操作系統(tǒng) 環(huán)境下,都可以順利、正確地打印或顯示出各國(guó)文字。本發(fā)明的另一目的在于有效解決其文字編碼不兼容的問(wèn)題。基于上述目的,本發(fā)明公開(kāi)一種文字編碼轉(zhuǎn)換的方法,應(yīng)用于一計(jì)算 機(jī)中的一操作系統(tǒng),利用操作系統(tǒng)中一數(shù)據(jù)轉(zhuǎn)換服務(wù)(Data Transformation Services)及一數(shù)據(jù)庫(kù)中的轉(zhuǎn)碼表,用以將所欲顯示或打印的文字,做一 轉(zhuǎn)碼的處理,使其順利顯示或打印,文字編碼轉(zhuǎn)換的方法包含下列步驟 輸出一第一文件;利用數(shù)據(jù)轉(zhuǎn)換服務(wù)將第一文件中的文字內(nèi)容導(dǎo)入一臨時(shí) 文件文字文件;將臨時(shí)文件文字文件的每一文字拆解成十六字節(jié)編碼內(nèi) 容;將拆解成十六字節(jié)的文字內(nèi)容對(duì)照其所能顯示或打印的一轉(zhuǎn)碼表重新 編碼;以及輸出至一動(dòng)態(tài)連接數(shù)據(jù)庫(kù)中,以達(dá)成顯示或打印該文字內(nèi)容。根據(jù)本發(fā)明的文字編碼轉(zhuǎn)換的方法,相較于現(xiàn)有技術(shù),其可避免先前 技術(shù)因編碼方式的不同而無(wú)法正常打印或顯示各國(guó)文字,而使輸出裝置 (例如打印機(jī))能正確地將各國(guó)文字順利打印或顯示。
圖1為本發(fā)明一實(shí)施例轉(zhuǎn)換文字編碼的流程圖;以及圖2為本發(fā)明一實(shí)施例轉(zhuǎn)換文字編碼的示意圖。圖3為一在中文操作系統(tǒng)中欲打印韓文文件所作的一轉(zhuǎn)碼示意圖。
附圖標(biāo)記說(shuō)明 10計(jì)算機(jī) 12輸出裝置 100中央處理器 102操作系統(tǒng)1020數(shù)據(jù)庫(kù)1022數(shù)據(jù)轉(zhuǎn)換服務(wù)1024動(dòng)態(tài)連接數(shù)據(jù)庫(kù)10200內(nèi)碼10202轉(zhuǎn)碼表S20 S28步驟具體實(shí)施方式
本發(fā)明提供一種文字編碼轉(zhuǎn)換的方法(文字編碼轉(zhuǎn)換的程序),利用 計(jì)算機(jī)中現(xiàn)有系統(tǒng)及所在文字內(nèi)碼架構(gòu),將所欲打印的他國(guó)文字轉(zhuǎn)換編 碼,再配合輸出裝置能接收的編碼方式重新編碼,使輸出裝置能將各國(guó)文 字順利打印或顯示的方法r請(qǐng)參閱圖1,其為本發(fā)明一實(shí)施例計(jì)算機(jī)系統(tǒng)示意圖。計(jì)算機(jī)系統(tǒng)中 至少包含一計(jì)算機(jī)(計(jì)算機(jī))10及一輸出裝置12。其中,計(jì)算機(jī)10包含 一中央處理器100及一操作系統(tǒng)102;而操作系統(tǒng)102包含一共享數(shù)據(jù)數(shù) 據(jù)庫(kù)1020 (以下簡(jiǎn)稱(chēng)數(shù)據(jù)庫(kù))、 一數(shù)據(jù)轉(zhuǎn)換服務(wù)系統(tǒng)(Data Transformation Services, DTS) 1022及一動(dòng)態(tài)連接數(shù)據(jù)庫(kù)(Dynamic Link Library, DLL)。 數(shù)據(jù)庫(kù)1020中儲(chǔ)存操作系統(tǒng)102所預(yù)存的內(nèi)碼10200及轉(zhuǎn)碼表10202,可 應(yīng)用在操作系統(tǒng)所使用的編碼系統(tǒng);動(dòng)態(tài)連接數(shù)據(jù)庫(kù)1024可用以暫時(shí)儲(chǔ) 存所欲輸出的數(shù)據(jù)。下面將通過(guò)圖2對(duì)本發(fā)明文字編碼轉(zhuǎn)換的方法做詳細(xì) 的敘述。請(qǐng)參閱圖2,其為本發(fā)明一實(shí)施例轉(zhuǎn)換文字編碼的流程圖。當(dāng)計(jì)算機(jī) 在做數(shù)據(jù)輸出入時(shí)可能因操作系統(tǒng)的位序與各硬件裝置系統(tǒng)的限制不同 而出錯(cuò),因此,當(dāng)要做數(shù)據(jù)交換時(shí),需配合各個(gè)輸出/輸入裝置其對(duì)于文字 的編碼要求,做一適當(dāng)?shù)霓D(zhuǎn)換。以下將舉一打印機(jī)做一輸出裝置,作為說(shuō)
明之用。
本發(fā)明通過(guò)操作系統(tǒng)中編碼系統(tǒng)與輸出裝置的編碼系統(tǒng)內(nèi)含相同的 (子)字集,利用數(shù)據(jù)轉(zhuǎn)換服務(wù)及數(shù)據(jù)庫(kù)中所儲(chǔ)存的內(nèi)碼,則運(yùn)用所設(shè)計(jì)
的程序做轉(zhuǎn)換。其中,數(shù)據(jù)庫(kù)中的內(nèi)碼是以Unicode編碼為主,又作為本 發(fā)明程序中的基底字集。當(dāng)然我們不限定于此一編碼方式作基底字集,也 可使用UCS4編碼方式來(lái)做基底字集。基底字集指各地區(qū)的語(yǔ)文符號(hào)在編 碼系統(tǒng)內(nèi)部的表示方式,而且它還是各地區(qū)所有語(yǔ)文符號(hào)的集合。根據(jù)此 定義,表示我們可以將世界各地所有的編碼方式轉(zhuǎn)換成基底字集來(lái)統(tǒng)一處 理。
步驟S20,當(dāng)計(jì)算機(jī)欲將一第一文件輸出至打印機(jī)打印時(shí),由于輸出 的第一文件文字編碼格式并不符合打印機(jī)對(duì)于文字的編碼要求。步驟S22, 所設(shè)計(jì)的程序會(huì)將第一文件中的文字內(nèi)容,利用DTS將文字內(nèi)容導(dǎo)入并制 作成一臨時(shí)文字文件(TXT),其中利用DTS將文字導(dǎo)出時(shí)不會(huì)使文字變 成亂碼。步驟S24,程序中函數(shù)將設(shè)定使原先以操作系統(tǒng)的編碼系統(tǒng)所編 碼的文字內(nèi)容轉(zhuǎn)成符合基底字集的編碼方式,即將每一文字拆解成16字 節(jié)的Unicode系統(tǒng)。步驟S26,再將所有拆解成16字節(jié)的文字編碼,配合 打印機(jī)的編碼系統(tǒng)重新編碼,其中,打印機(jī)的編碼系統(tǒng)與Unicode編碼方 式之間具有一個(gè)適當(dāng)?shù)霓D(zhuǎn)碼表,利用此一轉(zhuǎn)碼表就可以很容易地將 Unicode編碼轉(zhuǎn)換為打印機(jī)的編碼系統(tǒng)。
最后,步驟S28,將轉(zhuǎn)碼(重新編碼)后的文字內(nèi)容發(fā)送至動(dòng)態(tài)連接 數(shù)據(jù)庫(kù)中,并選擇以打印機(jī)編碼系統(tǒng)的打印控制代碼,以達(dá)成打印該文字 內(nèi)容。
在本發(fā)明中,數(shù)據(jù)庫(kù)內(nèi)碼主要的任務(wù)在讓同一份程序代碼可以處理各 地區(qū)的語(yǔ)言,因而可以適用于各地區(qū),而不需要額外修改程序本身。因此, 這個(gè)轉(zhuǎn)碼接口 (程序)只負(fù)責(zé)操作系統(tǒng)所采用的編碼,與系統(tǒng)基底字集所 采用的編碼系統(tǒng)互轉(zhuǎn)而己。此轉(zhuǎn)碼接口最大的用途在于方便程序做文字處 理,可以做到任意編碼系統(tǒng)間的互轉(zhuǎn)。因此,這樣寫(xiě)出來(lái)的程序就是一個(gè) 支持操作系統(tǒng)的程序,可以在不需要修改操作系統(tǒng)程序代碼本身的情況下 適用于各語(yǔ)系及編碼系統(tǒng)。
請(qǐng)參閱圖3所示,其為一在中文操作系統(tǒng)中欲打印例如韓文文件所做
一轉(zhuǎn)碼示意圖。因?yàn)榉斌w中文操作系統(tǒng)的編碼方式不同于韓文的編碼方 式,導(dǎo)致在打印文件時(shí)會(huì)打印出亂碼。因此,利用本發(fā)明轉(zhuǎn)換接口將韓文 文字轉(zhuǎn)成定長(zhǎng)編碼方式時(shí),由于每個(gè)字都是故定的長(zhǎng)度(即字節(jié)數(shù)),稱(chēng)
之為寬字符(wide character),這使得系統(tǒng)可以很方便做字符串處理。
當(dāng)我們將文字內(nèi)容拆解成16字節(jié)的Unicode系統(tǒng)(如圖3中左邊所 示),所對(duì)應(yīng)的文字,如 一個(gè)雙字節(jié)韓國(guó)文字(如圖3中右邊所示第一 文字)將拆解成—CO—C7形式,而單字節(jié)的英文、符號(hào)、或數(shù)字拆解后 將在高位處自動(dòng)補(bǔ)上OO,成為—00—75形式,在發(fā)送至DLL中。最終打 印機(jī)所接收到的字節(jié)為C0C7B7E10075C0C80033B7E700570045,則打印 機(jī)能順利打印出如圖3中右邊所示的文字內(nèi)容,即在韓文環(huán)境下可以看到 的韓文及ASCII字符符號(hào),,
在本發(fā)明中,通過(guò)數(shù)據(jù)轉(zhuǎn)換服務(wù)(DTS)將文件內(nèi)容導(dǎo)入臨時(shí)文件文 字文件后,利用程序進(jìn)行轉(zhuǎn)碼工作時(shí),它實(shí)際上是先將該文字編碼轉(zhuǎn)成基 底字集編碼方式,然后再利用一轉(zhuǎn)碼表轉(zhuǎn)成目的編碼方式,如此便可確保 只要編碼中有共同的(子)字集時(shí),轉(zhuǎn)換可以順利進(jìn)行。
以上所述是利用較佳實(shí)施例詳細(xì)說(shuō)明本發(fā)明,而非限制本發(fā)明的范 圍,且所屬技術(shù)領(lǐng)域中具有通常知識(shí)者,適當(dāng)作些改變及調(diào)整,仍將不失 本發(fā)明的要義所在,也不脫離本發(fā)明的權(quán)利要求書(shū)的保護(hù)范圍。
權(quán)利要求
1.一種文字編碼轉(zhuǎn)換的方法,用于一計(jì)算機(jī)中的一操作系統(tǒng),以顯示或打印文字,該方法包含下列步驟利用一數(shù)據(jù)轉(zhuǎn)換服務(wù)將一第一文件中的文字內(nèi)容導(dǎo)入一臨時(shí)文件文字文件;將所述臨時(shí)文件文字文件的每一文字拆解成十六字節(jié)編碼內(nèi)容;將所述十六字節(jié)編碼內(nèi)容對(duì)照其所能顯示或打印的一轉(zhuǎn)碼表重新編碼;以及輸出至一動(dòng)態(tài)連接數(shù)據(jù)庫(kù)中,以顯示或打印所述文字內(nèi)容。
2. 如權(quán)利要求1所述的方法,其特征在于,所述文字內(nèi)容編碼拆解 成十六字節(jié)編碼內(nèi)容可利用Unicode內(nèi)碼對(duì)照來(lái)完成。
3. 如權(quán)利要求1所述的方法,其特征在于,所述轉(zhuǎn)碼表為配合所使 用的一打印機(jī)的打印字體,以順利打印出所述第一文件的正確內(nèi)容。
4. 如權(quán)利要求1所述的方法,其特征在于,所述第一文件中的內(nèi)容 用多國(guó)文字撰寫(xiě)。
5. 如權(quán)利要求1所述的方法,其特征在于,所述拆解成十六字節(jié)的 每一文字在所述轉(zhuǎn)碼表中都有一對(duì)應(yīng)轉(zhuǎn)碼文字。
6. 如權(quán)利要求1所述的方法,其特征在于,所述文字內(nèi)容編碼拆解 成十六字節(jié)編碼內(nèi)容是利用UCS4編碼方式對(duì)照來(lái)完成。
7. 如權(quán)利要求1所述的方法,其特征在于,所述轉(zhuǎn)碼表儲(chǔ)存于所述 計(jì)算機(jī)中的一數(shù)據(jù)庫(kù)。
全文摘要
本發(fā)明公開(kāi)一種文字編碼轉(zhuǎn)換的方法,利用計(jì)算機(jī)中現(xiàn)有系統(tǒng)及所在文字內(nèi)碼架構(gòu),將所欲打印的他國(guó)文字轉(zhuǎn)換編碼;再配合打印機(jī)能接收的編碼方式重新編碼,使打印機(jī)能將各國(guó)文字列順利印出的方法。
文檔編號(hào)G06F3/12GK101149669SQ20061011646
公開(kāi)日2008年3月26日 申請(qǐng)日期2006年9月22日 優(yōu)先權(quán)日2006年9月22日
發(fā)明者姚春光 申請(qǐng)人:英華達(dá)(上海)科技有限公司