亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法

文檔序號(hào):6469406閱讀:896來源:國知局

專利名稱::一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法
技術(shù)領(lǐng)域
:本發(fā)明涉及編碼轉(zhuǎn)換,特別是一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法,主要適用于對(duì)存儲(chǔ)空間要求比較嚴(yán)格的便攜式電子產(chǎn)品的字符處理。
背景技術(shù)
:GB2312碼是我國公布的簡體漢字編碼方案,也稱國標(biāo)碼,國標(biāo)碼對(duì)6763個(gè)漢字集進(jìn)行了編碼,涵蓋了大多數(shù)正在使用的漢字。Unicode碼是一種國際標(biāo)準(zhǔn)編碼,采用二個(gè)字節(jié)編碼,目前在網(wǎng)絡(luò)、Windows系統(tǒng)和很多大型軟件中得到應(yīng)用。目前這兩種編碼在通信系統(tǒng)中都有比較廣泛的應(yīng)用。漢字的UniCode編碼基本上是從0x4E00到0x9FBB連續(xù)排列,漢字基本出現(xiàn)在這個(gè)編碼范圍中。漢字的GB2312區(qū)位編碼表,共包含682個(gè)符號(hào)(第01-09區(qū))、6763個(gè)漢字(第16-87區(qū)),其中第01—09區(qū)為國標(biāo)符號(hào),第10-15區(qū)為空區(qū)。對(duì)于位于第16-87區(qū)個(gè)漢字,其GB2312編碼位于B0A1—F7FE之間,其對(duì)應(yīng)的Unicode編碼值位于對(duì)于0x4E00到0x9FBB之間;第01-09區(qū)的GB3212編碼值在A1A1—A9FE之間的國際符號(hào),其對(duì)應(yīng)的Unicode編碼值在0x0000—0xFFFF之間分布比較散亂,沒有固定的規(guī)律。一般Unicode到GB2312的轉(zhuǎn)換方法常用的有兩種第一種是針對(duì)Unicode編碼值在0x0000—0xFFFF之間建立一個(gè)大的轉(zhuǎn)換數(shù)組,這樣比較浪費(fèi)存儲(chǔ)空間;第二種是針對(duì)Unicode編碼值在0x4E00到0x9FBB之間建立一個(gè)大的數(shù)組,針對(duì)在這個(gè)范圍之外的常用符號(hào)單獨(dú)建立一個(gè)數(shù)組,來進(jìn)行査找轉(zhuǎn)換,這樣做比較節(jié)約空間,但是逐個(gè)符號(hào)査找的效率非常低。
發(fā)明內(nèi)容為克服上述已有技術(shù)的不足,本發(fā)明要解決的技術(shù)問題是提供一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法,符合嵌入式電子設(shè)備對(duì)存儲(chǔ)空間要求比較嚴(yán)格的需求。為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案是一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法,包括以下步驟步驟h讀取存儲(chǔ)在嵌入式電子設(shè)備的第一存儲(chǔ)設(shè)備中的一字符的Unicode編碼;步驟2:將所述字符的Unicode編碼右移8位,獲取該Unicode編碼的高8位數(shù)據(jù);步驟3:以步驟2的高8位數(shù)據(jù)為下標(biāo),在區(qū)間定位表中獲取偏移量;步驟4:使用所述字符的Unicode編碼值減去步驟3所得的偏移量,得到差值;步驟5:以步驟4所得差值為下標(biāo),在編碼轉(zhuǎn)換表中獲取該字符的GB2312編碼,存儲(chǔ)在嵌入式電子設(shè)備的第二存儲(chǔ)設(shè)備中。步驟1所述的第一存儲(chǔ)設(shè)備是R0M。步驟5所述的第二存儲(chǔ)設(shè)備是RAM。所述的Unicode編碼到GB2312的編碼轉(zhuǎn)換表通過國際符號(hào)、中文字符、無效字符三部分分成8個(gè)區(qū)間組合來實(shí)現(xiàn),其中國際符號(hào)為6個(gè)區(qū)間,中文字符為l個(gè)區(qū)間,無效字符為l個(gè)區(qū)間。Unicode編碼的區(qū)間定位表采用國際符號(hào)、中文字符、無效字符的定位偏移量來組成。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是本發(fā)明接口簡單可靠,實(shí)現(xiàn)非常方便,對(duì)于手機(jī)等嵌入式電子設(shè)備具有較強(qiáng)通用性和實(shí)用性,可以有效的減少存儲(chǔ)空間的使用,提高效率。圖l是本發(fā)明方法的流程圖。具體實(shí)施方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的具體實(shí)施方式做進(jìn)一步詳細(xì)的說明,但不應(yīng)以此限制本發(fā)明的保護(hù)范圍。Unicode編碼到GB2312的編碼轉(zhuǎn)換表由UniCodeToGBTable數(shù)組實(shí)現(xiàn),UniCodeToGBTable是一個(gè)有0x6B00個(gè)元素的數(shù)組,每個(gè)元素為2個(gè)字節(jié);數(shù)組的創(chuàng)建根據(jù)國際符號(hào)的Unicode分布區(qū)間大體為0x0000-0x04FF,0x2000--0x26FF,0x3000—0x32FF,OxE000—0xE2FF,0xE500--0xE8FF,OxFE00--OxFFFF共6個(gè)區(qū)間,中文字符的Unicode分布區(qū)間在0x4E00—0x9FFF,無效字符的區(qū)間用0x0500—0x05FF來代表實(shí)現(xiàn),總共8個(gè)區(qū)間。按照Unicode編碼值的順序?qū)⑸厦?個(gè)區(qū)間的值對(duì)應(yīng)的GB2312編碼連接起來創(chuàng)建UniCodeToGBTable數(shù)組。對(duì)于Unicode編碼在0x0000-0x04FF,0x2000--0x26FF,0x3000--0x32FF,0x4E00—0x9FFF,0xE000—0xE2FF,0xE500--0xE8FF,OxFE00--0xFFFF共7個(gè)區(qū)間中的符號(hào),數(shù)組元素的GB2312編碼值對(duì)應(yīng)的Unicode編碼值相對(duì)于數(shù)組下標(biāo)分別偏移了0x0000,OxlAOO,0x2300,0x3E00,0x7E00,0x8000,0x9500,相對(duì)于
背景技術(shù)
的第一種轉(zhuǎn)換方法使用一個(gè)完整的Unicode編碼到GB2312編碼的轉(zhuǎn)換數(shù)組節(jié)約了0x9500*2=74.5K字節(jié)的空間。UniCodeToGBTable數(shù)組的元素為表l中第2列的Unicode編碼值對(duì)應(yīng)的GB2312編碼。表l是UniCodeToGBTable數(shù)組的下標(biāo)、元素以及偏移值對(duì)照?qǐng)D。表l元素下標(biāo)(十六進(jìn)制)對(duì)應(yīng)的Unicode編碼值(十六進(jìn)制)偏移值(十六進(jìn)制)0x0000-0x04FF0x0000-0x04FF0x00000x0500-0x05FF無效值0x0600--OxOCFF0x2000--0x26FFOxlAOOOxOD00--OxOFFF0x3000--0x32FF0x23000x1000--0x6IFF0x4E00--0x9FFF0x3E000x6200--0x64FFOxE000--0xE2FF0x7E000x6500--0x68FF0xE500--0xE8FF0x80000x6900—0x6AFFOxFEOO--OxFFFF0x9500UniCodeToGBTable數(shù)組包含了6763個(gè)漢字、國際符號(hào)、無效字符三種情況的Unicode編碼到GB2312編碼的轉(zhuǎn)換數(shù)據(jù),我們可以通過創(chuàng)建一個(gè)Unicode編碼字符在UniCodeToGBTable數(shù)組中對(duì)應(yīng)的GB2312編碼的位置的定位數(shù)組來實(shí)現(xiàn)對(duì)一個(gè)字符的編碼轉(zhuǎn)換。Unicode編碼到GB2312的編碼轉(zhuǎn)換表通過國際符號(hào)、中文字符、無效字符三部分分成8個(gè)區(qū)間組合來實(shí)現(xiàn),其中國際符號(hào)為6個(gè)區(qū)間,中文字符為l個(gè)區(qū)間,無效字符為1個(gè)區(qū)間。Unicode編碼的區(qū)間定位表采用國際符號(hào)、中文字符、無效字符的定位偏移量來組成。國際符號(hào)的Unicode編碼定位分為6個(gè)不連續(xù)區(qū)間來實(shí)現(xiàn),6個(gè)區(qū)間通過不同的偏移量來實(shí)現(xiàn),不同的偏移量對(duì)應(yīng)編碼轉(zhuǎn)換表中不同的區(qū)間。無效字符的Unicode編碼定位分為6個(gè)不連續(xù)區(qū)間來實(shí)現(xiàn),6個(gè)區(qū)間通過不同的偏移量來實(shí)現(xiàn),所有無效字符對(duì)應(yīng)的GB2312編碼位置相同;所有無效字符對(duì)應(yīng)的GB2312編碼位置相同,是無效字符編碼區(qū)間。通過Unicode編碼的區(qū)間定位表獲取字符Unicode編碼對(duì)應(yīng)的不同偏移量,在Unicode編碼到GB2312的編碼轉(zhuǎn)換表的不同區(qū)間獲取字符對(duì)應(yīng)的GB2312編碼;Unicode編碼的區(qū)間定位表由uniToGBPosition數(shù)組實(shí)現(xiàn)。Unicode編碼數(shù)據(jù)按OxFF個(gè)數(shù)據(jù)分為一組,總計(jì)0x0000--OxFFFF個(gè)Unicode編碼數(shù)據(jù)可以分為OxFF組,某個(gè)字符高八位數(shù)據(jù)就對(duì)應(yīng)著Unicode編碼的分組,例如Unicode編碼0x4E98就位于0x4E分組。uniToGBPosition包含256個(gè)元素,每個(gè)元素值就是對(duì)應(yīng)分組的偏移值,如果一個(gè)Unicode編碼對(duì)應(yīng)的分組的偏移值為0x0100"n-5),那么這個(gè)Unicode編碼轉(zhuǎn)換后的GB2312編碼在UniCodeToGBTable數(shù)組中的位置下標(biāo)就是0x0500--0x05FF之間,就是無效符號(hào),從表2的第2列可以得出這樣的分組共有0x96個(gè),這樣編碼轉(zhuǎn)換數(shù)組相對(duì)于第一種轉(zhuǎn)換方法節(jié)約了0x950(^2個(gè)字節(jié)的空間。表2是uniToGBPosition數(shù)組的標(biāo)和值的元素值的對(duì)應(yīng)圖,n為下標(biāo)。表2元素下標(biāo)(十六進(jìn)制)元素值(十六進(jìn)制)0x00-0x040x00000x5--OxlF0x0100*(n-5)0x20—0x26OxlAOO0x27--0x2F0x0100*(n-5)0x30—0x320x23000x33—0x4D0x0100*(n-5)0x4E--0x9F0x3E00OxA0--OxDF0x0100*(n-5)<table>tableseeoriginaldocumentpage7</column></row><table>從UniCodeToGBTable數(shù)組和uniToGBPosition數(shù)組的創(chuàng)建原理可以得出編碼轉(zhuǎn)換公式,假設(shè)一個(gè)符號(hào)的Unicode編碼值為source(2個(gè)字節(jié)),其轉(zhuǎn)換為GB2312后的編碼值為dest(2個(gè)字節(jié))。那么用C語言表示的公式為dest=UniCodeToGBTable[source-uniToGBPosition[source》8]]。請(qǐng)參閱圖1。本發(fā)明Unicode編碼到GB2312編碼轉(zhuǎn)換方法的步驟如下步驟h讀取存儲(chǔ)在嵌入式電子設(shè)備ROM中字符的Unicode編碼;步驟2:將該字符的Unicode編碼右移8位,獲取Unicode編碼的高8位數(shù)據(jù);步驟3:以步驟2的高8位數(shù)據(jù)為下標(biāo),獲取uniToGBPosition數(shù)組的元素值,即偏移量;步驟4:使用字符的Unicode編碼值減去步驟3所得的偏移量,得到差值;步驟5:以步驟4所的差值為下標(biāo),在UniCodeToGBTable數(shù)組中獲取到對(duì)應(yīng)的元素值,存儲(chǔ)在嵌入式電子設(shè)備RAM中;步驟5所得的元素值就是該字符的GB2312編碼,可以用來進(jìn)行字符顯示或者數(shù)據(jù)傳輸?shù)?。一個(gè)簡單的例子如下1、對(duì)于存儲(chǔ)在ROM中的字符'《',該字符以Unicode編碼形式存儲(chǔ),為0xFE3E;2、對(duì)Unicode碼右移8位,得到結(jié)果為0xFE,十進(jìn)制為254;3、計(jì)算偏移量uniToGBPosition[254]=0x9500;4、計(jì)算差值0xFE3E—0x9500=0x693E;5、計(jì)算UniCodeToGBTable=0xA6E7,存儲(chǔ)在RAM中;6、利用字符'《'的GB2312編碼值0xA6E7通過GB編碼字庫顯示或者進(jìn)行傳輸。對(duì)于字符'^'的從Unicode到GB2312的轉(zhuǎn)換方法,如果使用
背景技術(shù)
的第一種方法,占用ROM空間會(huì)增加一倍以上;使用
背景技術(shù)
的第二種方法則轉(zhuǎn)換時(shí)間會(huì)增加數(shù)倍。本發(fā)明提出了一種簡單可靠且效率較高的Unicode編碼到GB2312編碼的轉(zhuǎn)換方案。使用了8個(gè)Unicode編碼區(qū)間的組合方式來減小UniCodeToGBTable存儲(chǔ)空間,使用13個(gè)編碼區(qū)間的偏移量和其他無效字符編碼區(qū)間的偏移量來組成uniToGBPosition數(shù)組。通過數(shù)組uniToGBPosition定位字符Unicode編碼的偏移量,根據(jù)此偏移量在數(shù)組UniCodeToGBTable中定位字符的GB2312編碼。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用來限定本發(fā)明的實(shí)施范圍。即凡依本發(fā)明申請(qǐng)專利范圍的內(nèi)容所作的等效變化與修飾,都應(yīng)為本發(fā)明的技術(shù)范疇。權(quán)利要求1、一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法,其特征在于包括以下步驟步驟1讀取存儲(chǔ)在嵌入式電子設(shè)備的第一存儲(chǔ)設(shè)備中的一字符的Unicode編碼;步驟2將所述字符的Unicode編碼右移8位,獲取該Unicode編碼的高8位數(shù)據(jù);步驟3以步驟2的高8位數(shù)據(jù)為下標(biāo),在區(qū)間定位表中獲取偏移量;步驟4使用所述字符的Unicode編碼值減去步驟3所得的偏移量,得到差值;步驟5以步驟4所得差值為下標(biāo),在編碼轉(zhuǎn)換表中獲取該字符的GB2312編碼,存儲(chǔ)在嵌入式電子設(shè)備的第二存儲(chǔ)設(shè)備中。2、根據(jù)權(quán)利要求1所述的轉(zhuǎn)換方法,其特征在于步驟1所述的第一存儲(chǔ)設(shè)備是R0M。3、根據(jù)權(quán)利要求1所述的轉(zhuǎn)換方法,其特征在于步驟5所述的第二存儲(chǔ)設(shè)備是RAM。4、根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的轉(zhuǎn)換方法,其特征在于所述的Unicode編碼到GB2312的編碼轉(zhuǎn)換表通過國際符號(hào)、中文字符、無效字符三部分分成8個(gè)區(qū)間組合來實(shí)現(xiàn),其中國際符號(hào)為6個(gè)區(qū)間,中文字符為l個(gè)區(qū)間,無效字符為1個(gè)區(qū)間。5、根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的轉(zhuǎn)換方法,其特征在于Unicode編碼的區(qū)間定位表采用國際符號(hào)、中文字符、無效字符的定位偏移量來組成。全文摘要本發(fā)明公開了一種Unicode編碼到GB2312編碼轉(zhuǎn)換方法,其特征在于包括以下步驟步驟1讀取存儲(chǔ)在嵌入式電子設(shè)備的第一存儲(chǔ)設(shè)備中的一字符的Unicode編碼;步驟2將所述字符的Unicode編碼右移8位,獲取該Unicode編碼的高8位數(shù)據(jù);步驟3以步驟2的高8位數(shù)據(jù)為下標(biāo),在區(qū)間定位表中獲取偏移量;步驟4使用所述字符的Unicode編碼值減去步驟3所得的偏移量,得到差值;步驟5以步驟4所得差值為下標(biāo),在編碼轉(zhuǎn)換表中獲取該字符的GB2312編碼,存儲(chǔ)在嵌入式電子設(shè)備的第二存儲(chǔ)設(shè)備中。本發(fā)明可以有效的減少存儲(chǔ)空間的使用,提高效率。文檔編號(hào)G06F17/22GK101404007SQ200810202969公開日2009年4月8日申請(qǐng)日期2008年11月19日優(yōu)先權(quán)日2008年11月19日發(fā)明者郭貴軍申請(qǐng)人:聞泰集團(tuán)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1