999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向信息系統(tǒng)跨平臺(tái)輕量應(yīng)用的漢字編碼轉(zhuǎn)換程序①

2020-07-25 11:19:50葛光富

葛光富

(中國(guó)電子科技集團(tuán)公司第二十八研究所,南京 210007)

引言

在我國(guó)的信息系統(tǒng)工程應(yīng)用中,順應(yīng)國(guó)際化時(shí)代的發(fā)展,各類新運(yùn)用的工具和軟件的漢字編碼大多采用了全球共享通用的Unicode字符集,該字符集目前能夠涵蓋世界上主要語(yǔ)言的符號(hào)和文字.而在指揮控制、網(wǎng)絡(luò)安全、公共交通等業(yè)務(wù)領(lǐng)域方面,現(xiàn)役信息系統(tǒng)的漢字編碼包括有GB2312、GBK 以及GB18030等,為兼容與已有系統(tǒng)的互譯互操作,故按照國(guó)際化要求新開發(fā)的信息系統(tǒng)在相當(dāng)?shù)囊欢螘r(shí)間內(nèi),仍會(huì)面臨著上述編碼形式的漢字編碼轉(zhuǎn)換需求[1-4].

綜合軍民用市場(chǎng),有著大量的計(jì)算處理設(shè)備用于搭建各型信息系統(tǒng),但這些設(shè)備卻部署著種類多樣、復(fù)雜不一的操作系統(tǒng)運(yùn)行環(huán)境.尤其是嵌入式設(shè)備更為突出,如車載終端的VxWorks (美國(guó)風(fēng)河)、ReWorks(電科32所)等,便攜終端的Android(美國(guó)谷歌)、WinCE (美國(guó)微軟)、AOS (深圳華為)、SyberOS (北京元心)等.因此,為降低系統(tǒng)開發(fā)維護(hù)成本、提升行業(yè)企業(yè)效益,用于支撐應(yīng)用跨操作系統(tǒng)平臺(tái)快速移植改造的漢字編碼轉(zhuǎn)換技術(shù),成為信息系統(tǒng)軟件服務(wù)平臺(tái)統(tǒng)籌規(guī)劃中的必要考慮因素.

要進(jìn)行漢字編碼轉(zhuǎn)換,對(duì)于Linux/類Linux系統(tǒng)上的軟件,利用GNU (GNU is Not Unix,指的是一個(gè)自由軟件工程項(xiàng)目)的libconv庫(kù)即可實(shí)現(xiàn).該庫(kù)支持包括世界主流語(yǔ)系在內(nèi)的字符集區(qū)域標(biāo)準(zhǔn)與國(guó)家標(biāo)準(zhǔn)編碼間的互轉(zhuǎn),但是這對(duì)于計(jì)算處理資源受限的嵌入式終端而言,資源占用就顯得有點(diǎn)龐大,且不利于移植改造應(yīng)用到各類操作系統(tǒng)尤其是國(guó)產(chǎn)化操作系統(tǒng).因此研究一種支持信息系統(tǒng)內(nèi)部以及信息系統(tǒng)間通用的輕量化、可適用、易維護(hù)的漢字編碼轉(zhuǎn)換方法,是在跨操作系統(tǒng)平臺(tái)應(yīng)用實(shí)踐中急需解決的問題.

本文利用Windows7 記事本工具,進(jìn)一步研究[5-7]開發(fā)出一種面向信息系統(tǒng)跨平臺(tái)輕量應(yīng)用的漢字編碼轉(zhuǎn)換程序,能夠提供有效的漢字編碼轉(zhuǎn)換接口,用于與已有信息系統(tǒng)的如文本、信息的漢字交互處理,支撐新開發(fā)信息系統(tǒng)的快速構(gòu)建開通.

1 常用漢字編碼

漢字編碼指的是為漢字設(shè)計(jì)的一種便于輸入電子計(jì)算機(jī)的代碼,是解決漢字能夠進(jìn)入計(jì)算機(jī)的關(guān)鍵.國(guó)標(biāo)碼,全名國(guó)家標(biāo)準(zhǔn)代碼,是我國(guó)的常用漢字編碼集,目前主要有GB2312、GBK、GB18030三種.另外,UTF-8因能夠與ASCII兼容而作為優(yōu)先采用的國(guó)際字符編碼,也涵蓋了漢字的編碼.

1.1 GB2312編碼

GB2312-80編碼是我國(guó)第一個(gè)漢字編碼國(guó)家標(biāo)準(zhǔn),共收錄漢字6763個(gè),同時(shí)收錄了682個(gè)非漢字全角字符.它對(duì)收錄的每個(gè)字符采用兩個(gè)字節(jié)表示,其編碼范圍為0xA1A1到0xFEFE,首字節(jié)在0xA1與0xFE之間,尾字節(jié)在0xA1與0xFE之間.其中0xB0A1到0xF7FE為漢字的編碼范圍,0xA1A1到0xA9FE為非漢字字符的編碼范圍,其他為空白區(qū).

1.2 GBK編碼[5]

GBK全稱《漢字內(nèi)碼擴(kuò)展規(guī)范》,是在GB2312標(biāo)準(zhǔn)基礎(chǔ)上的內(nèi)碼擴(kuò)展規(guī)范,使用了雙字節(jié)編碼方案,其編碼范圍從0x8140到0xFEFE,首字節(jié)在0x81與0xFE之間,尾字節(jié)在0x40與0xFE之間且不為0x7F,總共23 940個(gè)碼位,收錄了21 003個(gè)漢字,完全兼容GB2312-80標(biāo)準(zhǔn),支持國(guó)際標(biāo)準(zhǔn)ISO/IEC10646-1和國(guó)家標(biāo)準(zhǔn)GB13000-1 中的全部中日韓漢字,并包含了BIG5編碼中的所有漢字.GBK編碼空間組成如表1所示.

表1 GBK編碼空間組成

1.3 UTF-8編碼[6]

UTF-8是一種針對(duì)Unicode[7]字符集的可變長(zhǎng)度字符編碼,所有的字符均使用1到6個(gè)字節(jié)進(jìn)行編碼,是一種前綴碼.在只包含1個(gè)字節(jié)的UTF-8編碼中,其最高位置0,其余的7個(gè)二進(jìn)制位用來對(duì)字符進(jìn)行編碼;在含n(1

表2 UTF-8與Unicode編碼對(duì)照表

1.4 GB18030編碼

GB18030-2000《信息交換用漢字編碼字符集基本集的擴(kuò)充》,是我國(guó)計(jì)算機(jī)系統(tǒng)必須遵循的基礎(chǔ)性標(biāo)準(zhǔn)之一.它是GBK的取代版本,在其基礎(chǔ)上增加了6530個(gè)CJK(中日韓)統(tǒng)一漢字?jǐn)U充A的漢字(由4字節(jié)表示:第1字節(jié)0x81~0x82,第2字節(jié)0x30~0x39,第3字節(jié)0x81~0xFE,第4字節(jié)0x30~0x39,共占用了25 200個(gè)碼位).

2 漢字編碼轉(zhuǎn)換程序分析與設(shè)計(jì)

因GB18030 能夠前向兼容GBK、GB2312,基于這一特點(diǎn),適應(yīng)性選取GB18030與UTF-8間的編碼轉(zhuǎn)換來輕量應(yīng)用支撐信息系統(tǒng)的漢字編碼互處理需求,同時(shí)使用通用的C/C++語(yǔ)言,分析與設(shè)計(jì)出一種面向信息系統(tǒng)跨平臺(tái)輕量應(yīng)用的漢字編碼轉(zhuǎn)換程序.

2.1 GB18030與Unicode編碼映射表制作

要進(jìn)行GB18030與UTF-8間的漢字編碼轉(zhuǎn)換,就必須利用GB18030和Unicode間的漢字字符碼值映射關(guān)系,以及Unicode和UTF-8間的國(guó)際字符編碼轉(zhuǎn)換規(guī)則,故首先要制作GB18030與Unicode間的漢字編碼映射表.

GB18030編碼中,GBK 漢字字符由2個(gè)字節(jié)表示,CJK統(tǒng)一漢字?jǐn)U充A的漢字字符由4個(gè)字節(jié)表示;與其對(duì)應(yīng)的Unicode標(biāo)準(zhǔn)字符集中,GBK、CJK統(tǒng)一漢字?jǐn)U充A的漢字字符編碼占用2個(gè)字節(jié)大小的空間.兩者之間的漢字字符編碼存在一一映射的關(guān)系,可以通過編制漢字字符編碼相互映射的表來進(jìn)行轉(zhuǎn)換.

GB18030與Unicode編碼映射表在互聯(lián)網(wǎng)上百度文庫(kù)、CSDN 社區(qū)等處能夠找到部分缺漏不全的字符編碼對(duì)照,但在軟件程序中使用還是需要經(jīng)過二次加工制作成為可識(shí)別的代碼語(yǔ)言.而本文在Windows7系統(tǒng)平臺(tái)上,利用記事本工具和編寫轉(zhuǎn)換過程應(yīng)用程序來輔助生成代碼語(yǔ)言的漢字編碼映射表,具體的實(shí)現(xiàn)方法為:

1)根據(jù)1.2和1.4 小節(jié)中GBK、CJK統(tǒng)一漢字?jǐn)U充A的漢字編碼空間組成說明,編寫執(zhí)行GB18030編碼全漢字生成程序,將全部有效的編碼漢字按照碼值從低到高依次保存到一個(gè)文本文件GB.txt 中;

2)在使用記事本方式打開GB.txt文件后,將打開的文件另存為Unicode編碼的新文件Uni.txt 中;

3)編寫執(zhí)行GB18030與Unicode編碼映射表生成程序,對(duì)照GB.txt與Uni.txt文件,以C語(yǔ)言可識(shí)別代碼的數(shù)組形式生成GB18030與Unicode間的漢字編碼映射表,以支持兩者編碼的快速映射查找.映射表生成算法設(shè)計(jì)如算法1和算法2.

算法1.GB18030到Unicode 漢字編碼映射表生成算法1)創(chuàng)建GB18030到Unicode 漢字編碼映射表,其中數(shù)組支持存放元素65 536個(gè),數(shù)組元素下標(biāo)能夠一一對(duì)應(yīng)GB18030 漢字字符碼值,數(shù)組元素?cái)?shù)值為2個(gè)字節(jié)大小存儲(chǔ)的Unicode 漢字字符碼值,初始化映射表元素值為代表無效映射的0xFFFF;2)從Uni.txt文件中依次取得兩個(gè)字節(jié)組成漢字字符,獲取漢字字符的Unicode 碼值;3)從GB.txt文件中依次取得兩個(gè)字節(jié),根據(jù)兩個(gè)字節(jié)的碼值范圍判斷是否GBK 漢字字符,不是則再取得兩個(gè)字節(jié)組成4個(gè)字節(jié)的CJK統(tǒng)一漢字?jǐn)U充A的漢字字符,獲取漢字字符的GB18030 碼值;4)計(jì)算漢字字符的G B 1 8 0 3 0 碼值在按照碼值從低到高的GB18030編碼范圍中的排序序號(hào)(如GBK 漢字的尾字節(jié)占用191個(gè)碼位,故0x8140 對(duì)應(yīng)序號(hào)為0,0x8240 對(duì)應(yīng)序號(hào)為191,依次類推,直到CJK統(tǒng)一漢字?jǐn)U充A,也按照同樣規(guī)則計(jì)算),該序號(hào)為Unicode 碼值的存放位置;5)將漢字字符的Unicode 碼值,存放到漢字編碼映射表中對(duì)應(yīng)的位置;6)返回第2)步,直到文件結(jié)束,生成GB18030到Unicode 漢字編碼映射表完畢.

算法2.Unicode到GB18030 漢字編碼映射表生成算法1)創(chuàng)建Unicode到GB18030 漢字編碼映射表,其中數(shù)組支持存放元素65 536個(gè),數(shù)組元素下標(biāo)為Unicode 漢字字符碼值,數(shù)組元素?cái)?shù)值為2個(gè)字節(jié)大小存儲(chǔ)并能夠一一對(duì)應(yīng)GB18030 漢字字符碼值,初始化映射表元素值為代表無效映射的0xFFFF;2)從GB.txt文件中依次取得兩個(gè)字節(jié),根據(jù)兩個(gè)字節(jié)的碼值范圍判斷是否GBK 漢字字符,不是則再取得兩個(gè)字節(jié)組成4個(gè)字節(jié)的CJK統(tǒng)一漢字?jǐn)U充A的漢字字符,獲取漢字字符的GB18030 碼值;3)漢字字符是CJK統(tǒng)一漢字?jǐn)U充A 漢字,則計(jì)算漢字字符的GB18030 碼值在按照碼值從低到高的GB18030編碼范圍中的排序序號(hào)(如GBK 漢字總計(jì)占用24 066個(gè)碼位,結(jié)合CJK統(tǒng)一漢字?jǐn)U充A 漢字的尾字節(jié)占用10個(gè)碼位,故0x81308130 對(duì)應(yīng)序號(hào)為24 066,0x81308230 對(duì)應(yīng)序號(hào)為24 076,依次類推),該序號(hào)為GB18030 碼值存表值,GBK字符的GB18030 碼值存表值直接使用原值;4)從Uni.txt文件中依次取得兩個(gè)字節(jié)組成漢字字符,根據(jù)該漢字字符的Unicode 碼值,獲取漢字字符的Unicode 碼值,該碼值為GB18030 碼值相對(duì)值的存放位置;5)將漢字的GB18030 碼值存表值,存放到漢字編碼映射表中對(duì)應(yīng)的位置;6)返回第2)步,直到文件結(jié)束,生成Unicode到GB18030 漢字編碼映射表完畢.

GB18030和Unicode間的漢字編碼映射表(如漢字“科”—0xC6BF/0x79D1)代碼語(yǔ)言示例如圖1所示,映射表總計(jì)1024行,每行64個(gè)碼值映射元素,其中值為0xFFFF 表明當(dāng)前位置對(duì)應(yīng)的GB18030編碼為無效編碼.

有了漢字編碼映射表,就可以結(jié)合UTF-8與Unicode的編碼轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)字符串GB18030與UTF-8編碼形式間的轉(zhuǎn)換,具體的轉(zhuǎn)換程序設(shè)計(jì)見后續(xù)小節(jié)中描述.

圖1 Unicode到GB18030編碼映射表

2.2 GB18030與Unicode編碼字符串轉(zhuǎn)換

將GB18030編碼字符串(含英文、數(shù)字等基礎(chǔ)ASCII 碼字符,其碼值范圍為0x0到0x7F)轉(zhuǎn)換到UTF-8編碼的算法如算法3.

算法3.GB18030到UTF-8編碼字符串轉(zhuǎn)換算法1)從GB18030編碼字符串中依次讀取一個(gè)字節(jié),根據(jù)碼值判斷是否基礎(chǔ)ASCII 碼字符,不是則再讀取一個(gè)字節(jié)組成兩個(gè)字節(jié)后判斷是否GBK 漢字字符,不是則再讀取兩個(gè)字節(jié)組成4個(gè)字節(jié)的CJK統(tǒng)一漢字?jǐn)U充A的漢字字符;2)字符類型是基礎(chǔ)ASCII 碼字符,則將字符按原碼值作為UTF-8字符寫入轉(zhuǎn)換后的編碼字符串,否則轉(zhuǎn)到下一步;3)根據(jù)漢字字符的碼值,計(jì)算字符在按照碼值從低到高的GB18030編碼范圍中的排序序號(hào),查找GB18030到Unicode 漢字編碼映射表,獲取對(duì)應(yīng)序號(hào)位置字符的Unicode 碼值;4)結(jié)合表2中體現(xiàn)的UTF-8與Unicode間的編碼轉(zhuǎn)換規(guī)則,根據(jù)漢字字符的Unicode 碼值計(jì)算得到字符的UTF-8編碼碼值,將相應(yīng)碼值的UTF-8字符寫入轉(zhuǎn)換后的編碼字符串;5)返回第1)步,直到待轉(zhuǎn)換字符串結(jié)束,生成轉(zhuǎn)換后UTF-8編碼字符串完畢.

GB18030到UTF-8編碼字符串轉(zhuǎn)換利用接口函數(shù)g2u()實(shí)現(xiàn),關(guān)鍵代碼如下:

將UTF-8編碼字符串轉(zhuǎn)換到GB18030編碼的算法如算法4.

算法4.UTF-8到GB18030編碼字符串轉(zhuǎn)換算法1)從UTF-8編碼字符串中依次讀取一個(gè)字節(jié),根據(jù)碼值判斷是否基礎(chǔ)ASCII 碼字符,不是則再讀取一個(gè)字節(jié)直至到組成UTF-8字符;2)字符類型是基礎(chǔ)ASCII 碼字符,則將字符按原碼值寫入轉(zhuǎn)換后的編碼字符串,否則轉(zhuǎn)到下一步;3)結(jié)合UTF-8與Unicode間的編碼轉(zhuǎn)換規(guī)則,根據(jù)UTF-8字符的碼值計(jì)算得到Unicode 碼值,查找Unicode到GB18030 漢字編碼映射表,獲取對(duì)應(yīng)碼值位置字符的GB18030 碼值存表值;4)根據(jù)Unicode 碼值的編碼范圍判斷對(duì)應(yīng)字符是否CJK統(tǒng)一漢字?jǐn)U充A 漢字,是則GB18030 碼值存表值作為在GB18030編碼范圍中的排序序號(hào)計(jì)算還原出GB18030 碼值,否則上一步存表值就是GB18030 碼值;5)將相應(yīng)碼值的GB18030字符寫入轉(zhuǎn)換后的編碼字符串,返回第1)步,直到待轉(zhuǎn)換字符串結(jié)束,生成轉(zhuǎn)換后GB18030編碼字符串完畢.

UTF-8到GB18030編碼字符串轉(zhuǎn)換利用接口函數(shù)u2g()實(shí)現(xiàn),關(guān)鍵代碼如下:

3 程序應(yīng)用實(shí)例

本文方法實(shí)現(xiàn)的漢字編碼轉(zhuǎn)換程序,以動(dòng)態(tài)庫(kù)的形式提供,適用于GTK、Tilcon、Element-UI、QT 等界面庫(kù)的信息系統(tǒng)軟件開發(fā),并已成功運(yùn)用于多型含裝甲車載嵌入式、單兵移動(dòng)便攜信息處理終端的陸軍業(yè)務(wù)信息系統(tǒng)中.這些信息系統(tǒng)中,配套工具開發(fā)的前端展現(xiàn)界面(如圖2所示)的漢字編碼類型大多數(shù)固定為UTF-8編碼,為兼容與已有系統(tǒng)如文本、協(xié)議的漢字交互處理,后端服務(wù)處理采用的中文編碼形式為GB18030或GBK.上述漢字編碼轉(zhuǎn)換程序不僅可以更輕量地應(yīng)用于各類業(yè)務(wù)信息系統(tǒng),而且利于信息系統(tǒng)間的軟件部件甚至整件的快速改造移植.這些都能夠?yàn)樘岣咝畔⑾到y(tǒng)的資源利用率以及降低系統(tǒng)的開發(fā)維護(hù)成本,起著積極的作用.

圖2 某裝甲車載平臺(tái)GTK 開發(fā)的前端界面示例

4 結(jié)束語(yǔ)

本文立足于為信息系統(tǒng)的處理終端尤其是嵌入式終端提供輕量化的跨平臺(tái)通用漢字編碼轉(zhuǎn)換手段,論述了常用漢字編碼的基本原理、編碼對(duì)照關(guān)系.同時(shí),給出了面向跨平臺(tái)輕量應(yīng)用的編碼轉(zhuǎn)換方案,這套方案已成功地在多型嵌入式如單兵業(yè)務(wù)信息系統(tǒng)中得到應(yīng)用[8],且也能適用于其他信息系統(tǒng)[9].

主站蜘蛛池模板: 中文字幕人成人乱码亚洲电影| 99久久性生片| 国产精品13页| 国产精品lululu在线观看| 国产网友愉拍精品视频| 亚洲中文字幕23页在线| 国产精品成人一区二区不卡| 在线免费不卡视频| 欧美97色| 精品免费在线视频| 国产精品成人一区二区不卡 | 国产精品自在线拍国产电影| 国产成年无码AⅤ片在线| a天堂视频| 久热精品免费| 综合社区亚洲熟妇p| 波多野结衣第一页| 国产亚洲欧美在线专区| 亚洲国产精品成人久久综合影院| 国产精品久久久久久影院| 亚洲精品第一页不卡| 免费一级无码在线网站| 亚洲经典在线中文字幕| 亚洲精品麻豆| 国产精品极品美女自在线看免费一区二区 | 亚洲国产中文在线二区三区免| 亚洲大尺码专区影院| 久操线在视频在线观看| 日韩无码白| 国产无遮挡猛进猛出免费软件| 免费国产小视频在线观看| AV网站中文| 国产成人AV综合久久| 国产成本人片免费a∨短片| 在线亚洲天堂| a欧美在线| 国产视频你懂得| 99人妻碰碰碰久久久久禁片| 国产毛片片精品天天看视频| 欧美成a人片在线观看| 伊人久久精品无码麻豆精品| 国产在线观看99| 国产成人精品免费视频大全五级| 人妻熟妇日韩AV在线播放| 超级碰免费视频91| 国产综合色在线视频播放线视| 亚洲精品动漫| 国产精品七七在线播放| 欧美中日韩在线| 精品国产99久久| 国产成人麻豆精品| 亚洲天堂首页| 青青草原偷拍视频| 久久免费观看视频| 天天摸夜夜操| 麻豆精品视频在线原创| 国产av一码二码三码无码| 国产视频入口| 色婷婷国产精品视频| 久草青青在线视频| 亚洲熟女偷拍| 97在线国产视频| 99视频在线精品免费观看6| 91在线视频福利| 国产成人在线无码免费视频| 理论片一区| 欧美高清国产| 欧美一区精品| 激情影院内射美女| 日韩精品久久无码中文字幕色欲| 91蜜芽尤物福利在线观看| 欧美日韩精品一区二区在线线| 久久永久精品免费视频| 伊人蕉久影院| 欧美成一级| 啊嗯不日本网站| 久久国产高清视频| www.亚洲一区| 九色视频一区| 久久香蕉国产线| 在线视频亚洲色图| 视频一区亚洲|