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

面向信息系統跨平臺輕量應用的漢字編碼轉換程序①

2020-07-25 11:19:50葛光富
計算機系統應用 2020年7期

葛光富

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

引言

在我國的信息系統工程應用中,順應國際化時代的發展,各類新運用的工具和軟件的漢字編碼大多采用了全球共享通用的Unicode字符集,該字符集目前能夠涵蓋世界上主要語言的符號和文字.而在指揮控制、網絡安全、公共交通等業務領域方面,現役信息系統的漢字編碼包括有GB2312、GBK 以及GB18030等,為兼容與已有系統的互譯互操作,故按照國際化要求新開發的信息系統在相當的一段時間內,仍會面臨著上述編碼形式的漢字編碼轉換需求[1-4].

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

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

本文利用Windows7 記事本工具,進一步研究[5-7]開發出一種面向信息系統跨平臺輕量應用的漢字編碼轉換程序,能夠提供有效的漢字編碼轉換接口,用于與已有信息系統的如文本、信息的漢字交互處理,支撐新開發信息系統的快速構建開通.

1 常用漢字編碼

漢字編碼指的是為漢字設計的一種便于輸入電子計算機的代碼,是解決漢字能夠進入計算機的關鍵.國標碼,全名國家標準代碼,是我國的常用漢字編碼集,目前主要有GB2312、GBK、GB18030三種.另外,UTF-8因能夠與ASCII兼容而作為優先采用的國際字符編碼,也涵蓋了漢字的編碼.

1.1 GB2312編碼

GB2312-80編碼是我國第一個漢字編碼國家標準,共收錄漢字6763個,同時收錄了682個非漢字全角字符.它對收錄的每個字符采用兩個字節表示,其編碼范圍為0xA1A1到0xFEFE,首字節在0xA1與0xFE之間,尾字節在0xA1與0xFE之間.其中0xB0A1到0xF7FE為漢字的編碼范圍,0xA1A1到0xA9FE為非漢字字符的編碼范圍,其他為空白區.

1.2 GBK編碼[5]

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

表1 GBK編碼空間組成

1.3 UTF-8編碼[6]

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

表2 UTF-8與Unicode編碼對照表

1.4 GB18030編碼

GB18030-2000《信息交換用漢字編碼字符集基本集的擴充》,是我國計算機系統必須遵循的基礎性標準之一.它是GBK的取代版本,在其基礎上增加了6530個CJK(中日韓)統一漢字擴充A的漢字(由4字節表示:第1字節0x81~0x82,第2字節0x30~0x39,第3字節0x81~0xFE,第4字節0x30~0x39,共占用了25 200個碼位).

2 漢字編碼轉換程序分析與設計

因GB18030 能夠前向兼容GBK、GB2312,基于這一特點,適應性選取GB18030與UTF-8間的編碼轉換來輕量應用支撐信息系統的漢字編碼互處理需求,同時使用通用的C/C++語言,分析與設計出一種面向信息系統跨平臺輕量應用的漢字編碼轉換程序.

2.1 GB18030與Unicode編碼映射表制作

要進行GB18030與UTF-8間的漢字編碼轉換,就必須利用GB18030和Unicode間的漢字字符碼值映射關系,以及Unicode和UTF-8間的國際字符編碼轉換規則,故首先要制作GB18030與Unicode間的漢字編碼映射表.

GB18030編碼中,GBK 漢字字符由2個字節表示,CJK統一漢字擴充A的漢字字符由4個字節表示;與其對應的Unicode標準字符集中,GBK、CJK統一漢字擴充A的漢字字符編碼占用2個字節大小的空間.兩者之間的漢字字符編碼存在一一映射的關系,可以通過編制漢字字符編碼相互映射的表來進行轉換.

GB18030與Unicode編碼映射表在互聯網上百度文庫、CSDN 社區等處能夠找到部分缺漏不全的字符編碼對照,但在軟件程序中使用還是需要經過二次加工制作成為可識別的代碼語言.而本文在Windows7系統平臺上,利用記事本工具和編寫轉換過程應用程序來輔助生成代碼語言的漢字編碼映射表,具體的實現方法為:

1)根據1.2和1.4 小節中GBK、CJK統一漢字擴充A的漢字編碼空間組成說明,編寫執行GB18030編碼全漢字生成程序,將全部有效的編碼漢字按照碼值從低到高依次保存到一個文本文件GB.txt 中;

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

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

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

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

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

有了漢字編碼映射表,就可以結合UTF-8與Unicode的編碼轉換規則,實現字符串GB18030與UTF-8編碼形式間的轉換,具體的轉換程序設計見后續小節中描述.

圖1 Unicode到GB18030編碼映射表

2.2 GB18030與Unicode編碼字符串轉換

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

算法3.GB18030到UTF-8編碼字符串轉換算法1)從GB18030編碼字符串中依次讀取一個字節,根據碼值判斷是否基礎ASCII 碼字符,不是則再讀取一個字節組成兩個字節后判斷是否GBK 漢字字符,不是則再讀取兩個字節組成4個字節的CJK統一漢字擴充A的漢字字符;2)字符類型是基礎ASCII 碼字符,則將字符按原碼值作為UTF-8字符寫入轉換后的編碼字符串,否則轉到下一步;3)根據漢字字符的碼值,計算字符在按照碼值從低到高的GB18030編碼范圍中的排序序號,查找GB18030到Unicode 漢字編碼映射表,獲取對應序號位置字符的Unicode 碼值;4)結合表2中體現的UTF-8與Unicode間的編碼轉換規則,根據漢字字符的Unicode 碼值計算得到字符的UTF-8編碼碼值,將相應碼值的UTF-8字符寫入轉換后的編碼字符串;5)返回第1)步,直到待轉換字符串結束,生成轉換后UTF-8編碼字符串完畢.

GB18030到UTF-8編碼字符串轉換利用接口函數g2u()實現,關鍵代碼如下:

將UTF-8編碼字符串轉換到GB18030編碼的算法如算法4.

算法4.UTF-8到GB18030編碼字符串轉換算法1)從UTF-8編碼字符串中依次讀取一個字節,根據碼值判斷是否基礎ASCII 碼字符,不是則再讀取一個字節直至到組成UTF-8字符;2)字符類型是基礎ASCII 碼字符,則將字符按原碼值寫入轉換后的編碼字符串,否則轉到下一步;3)結合UTF-8與Unicode間的編碼轉換規則,根據UTF-8字符的碼值計算得到Unicode 碼值,查找Unicode到GB18030 漢字編碼映射表,獲取對應碼值位置字符的GB18030 碼值存表值;4)根據Unicode 碼值的編碼范圍判斷對應字符是否CJK統一漢字擴充A 漢字,是則GB18030 碼值存表值作為在GB18030編碼范圍中的排序序號計算還原出GB18030 碼值,否則上一步存表值就是GB18030 碼值;5)將相應碼值的GB18030字符寫入轉換后的編碼字符串,返回第1)步,直到待轉換字符串結束,生成轉換后GB18030編碼字符串完畢.

UTF-8到GB18030編碼字符串轉換利用接口函數u2g()實現,關鍵代碼如下:

3 程序應用實例

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

圖2 某裝甲車載平臺GTK 開發的前端界面示例

4 結束語

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

主站蜘蛛池模板: 人人91人人澡人人妻人人爽 | 99热国产这里只有精品9九| 3D动漫精品啪啪一区二区下载| 四虎精品黑人视频| 午夜少妇精品视频小电影| 国产亚洲精品无码专| 无码AV日韩一二三区| 色天堂无毒不卡| 一级香蕉视频在线观看| 最新加勒比隔壁人妻| 999精品色在线观看| 国产精品人莉莉成在线播放| 欧美一级高清片欧美国产欧美| 亚洲精品天堂在线观看| 亚洲黄色片免费看| 中国国产一级毛片| 99久久精彩视频| 99无码熟妇丰满人妻啪啪| 欧美19综合中文字幕| 热久久综合这里只有精品电影| 精品久久国产综合精麻豆| 在线观看无码a∨| 国产成人三级| 人妻中文字幕无码久久一区| 91毛片网| 色欲国产一区二区日韩欧美| 国产精品99久久久久久董美香| 国产精品偷伦视频免费观看国产| 性69交片免费看| 国产一级毛片在线| 美女毛片在线| 国产免费久久精品99re不卡| 免费三A级毛片视频| 国产97视频在线| 91精品久久久久久无码人妻| 国产性精品| 综合色88| 欧美69视频在线| 无码有码中文字幕| 五月激激激综合网色播免费| 广东一级毛片| vvvv98国产成人综合青青| 毛片基地视频| 久久久久88色偷偷| 日韩第一页在线| 在线观看国产精品日本不卡网| 国产在线麻豆波多野结衣| 成人毛片免费在线观看| 久久久久九九精品影院| 超清无码熟妇人妻AV在线绿巨人| 亚洲中文久久精品无玛| 日韩欧美国产另类| 国产第一福利影院| 国产乱人伦精品一区二区| 青青青亚洲精品国产| 亚洲成年人片| 国产精品制服| 免费中文字幕一级毛片| 在线a视频免费观看| 美女一级毛片无遮挡内谢| 国产精品成人一区二区| 99这里只有精品免费视频| 欧美视频在线第一页| jizz国产视频| 国产91色在线| 日韩无码真实干出血视频| 日本www在线视频| 一区二区在线视频免费观看| 国产成人资源| 欧美一区二区精品久久久| 伊人大杳蕉中文无码| 最新加勒比隔壁人妻| 92精品国产自产在线观看 | 国产精品xxx| 亚洲国产精品久久久久秋霞影院| 黄色网在线免费观看| 91丨九色丨首页在线播放| 伊人成色综合网| 91热爆在线| 亚洲视频在线网| 久久久久国色AV免费观看性色| 四虎永久免费网站|