CN101404007A - 一种Unicode编码到GB2312编码转换方法 - Google Patents

一种Unicode编码到GB2312编码转换方法 Download PDF

Info

Publication number
CN101404007A
CN101404007A CNA2008102029691A CN200810202969A CN101404007A CN 101404007 A CN101404007 A CN 101404007A CN A2008102029691 A CNA2008102029691 A CN A2008102029691A CN 200810202969 A CN200810202969 A CN 200810202969A CN 101404007 A CN101404007 A CN 101404007A
Authority
CN
China
Prior art keywords
unicode
character
code
coding
interval
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2008102029691A
Other languages
English (en)
Inventor
郭贵军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wingtech Group Ltd
Original Assignee
Wingtech Group Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wingtech Group Ltd filed Critical Wingtech Group Ltd
Priority to CNA2008102029691A priority Critical patent/CN101404007A/zh
Publication of CN101404007A publication Critical patent/CN101404007A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明公开了一种Unicode编码到GB2312编码转换方法,其特征在于包括以下步骤:步骤1:读取存储在嵌入式电子设备的第一存储设备中的一字符的Unicode编码;步骤2:将所述字符的Unicode编码右移8位,获取该Unicode编码的高8位数据;步骤3:以步骤2的高8位数据为下标,在区间定位表中获取偏移量;步骤4:使用所述字符的Unicode编码值减去步骤3所得的偏移量,得到差值;步骤5:以步骤4所得差值为下标,在编码转换表中获取该字符的GB2312编码,存储在嵌入式电子设备的第二存储设备中。本发明可以有效的减少存储空间的使用,提高效率。

Description

一种Unicode编码到GB2312编码转换方法
技术领域
本发明涉及编码转换,特别是一种Unicode编码到GB2312编码转换方法,主要适用于对存储空间要求比较严格的便携式电子产品的字符处理。
背景技术
GB2312码是我国公布的简体汉字编码方案,也称国标码,国标码对6763个汉字集进行了编码,涵盖了大多数正在使用的汉字。Unicode码是一种国际标准编码,采用二个字节编码,目前在网络、Windows系统和很多大型软件中得到应用。目前这两种编码在通信系统中都有比较广泛的应用。
汉字的UniCode编码基本上是从0x4E00到0x9FBB连续排列,汉字基本出现在这个编码范围中。汉字的GB2312区位编码表,共包含682个符号(第01-09区)、6763个汉字(第16-87区),其中第01-09区为国标符号,第10-15区为空区。对于位于第16-87区个汉字,其GB2312编码位于B0A1--F7FE之间,其对应的Unicode编码值位于对于0x4E00到0x9FBB之间;第01-09区的GB3212编码值在A1A1--A9FE之间的国际符号,其对应的Unicode编码值在0x0000--0xFFFF之间分布比较散乱,没有固定的规律。
一般Unicode到GB2312的转换方法常用的有两种:第一种是针对Unicode编码值在0x0000--0xFFFF之间建立一个大的转换数组,这样比较浪费存储空间;第二种是针对Unicode编码值在0x4E00到0x9FBB之间建立一个大的数组,针对在这个范围之外的常用符号单独建立一个数组,来进行查找转换,这样做比较节约空间,但是逐个符号查找的效率非常低。
发明内容
为克服上述已有技术的不足,本发明要解决的技术问题是提供一种Unicode编码到GB2312编码转换方法,符合嵌入式电子设备对存储空间要求比较严格的需求。
为解决上述技术问题,本发明的技术方案是:
一种Unicode编码到GB2312编码转换方法,包括以下步骤:
步骤1:读取存储在嵌入式电子设备的第一存储设备中的一字符的Unicode编码;
步骤2:将所述字符的Unicode编码右移8位,获取该Unicode编码的高8位数据;
步骤3:以步骤2的高8位数据为下标,在区间定位表中获取偏移量;
步骤4:使用所述字符的Unicode编码值减去步骤3所得的偏移量,得到差值;
步骤5:以步骤4所得差值为下标,在编码转换表中获取该字符的GB2312编码,存储在嵌入式电子设备的第二存储设备中。
步骤1所述的第一存储设备是ROM。
步骤5所述的第二存储设备是RAM。
所述的Unicode编码到GB2312的编码转换表通过国际符号、中文字符、无效字符三部分分成8个区间组合来实现,其中国际符号为6个区间,中文字符为1个区间,无效字符为1个区间。
Unicode编码的区间定位表采用国际符号、中文字符、无效字符的定位偏移量来组成。
与现有技术相比,本发明的有益效果是:
本发明接口简单可靠,实现非常方便,对于手机等嵌入式电子设备具有较强通用性和实用性,可以有效的减少存储空间的使用,提高效率。
附图说明
图1是本发明方法的流程图。
具体实施方式
下面结合附图和实施例对本发明的具体实施方式做进一步详细的说明,但不应以此限制本发明的保护范围。
Unicode编码到GB2312的编码转换表由UniCodeToGBTable数组实现,UniCodeToGBTable是一个有0x6B00个元素的数组,每个元素为2个字节;数组的创建根据国际符号的Unicode分布区间大体为0x0000-0x04FF,0x2000--0x26FF,0x3000--0x32FF,0xE000--0xE2FF,0xE500--0xE8FF,0xFE00--0xFFFF共6个区间,中文字符的Unicode分布区间在0x4E00--0x9FFF,无效字符的区间用0x0500--0x05FF来代表实现,总共8个区间。按照Unicode编码值的顺序将上面8个区间的值对应的GB2312编码连接起来创建UniCodeToGBTable数组。
对于Unicode编码在0x0000-0x04FF,0x2000--0x26FF,0x3000--0x32FF,0x4E00--0x9FFF,0xE000--0xE2FF,0xE500--0xE8FF,0xFE00--0xFFFF共7个区间中的符号,数组元素的GB2312编码值对应的Unicode编码值相对于数组下标分别偏移了0x0000,0x1A00,0x2300,0x3E00,0x7E00,0x8000,0x9500,相对于背景技术的第一种转换方法使用一个完整的Unicode编码到GB2312编码的转换数组节约了0x9500*2=74.5K字节的空间。
UniCodeToGBTable数组的元素为表1中第2列的Unicode编码值对应的GB2312编码。表1是UniCodeToGBTable数组的下标、元素以及偏移值对照图。
表1
  元素下标(十六进制)  对应的Unicode编码值(十六进制)   偏移值(十六进制)
  0x0000-0x04FF  0x0000-0x04FF   0x0000
  0x0500-0x05FF  无效值
  0x0600--0x0CFF  0x2000--0x26FF   0x1A00
  0x0D00--0x0FFF  0x3000--0x32FF   0x2300
  0x1000--0x61FF  0x4E00--0x9FFF   0x3E00
  0x6200--0x64FF  0xE000--0xE2FF   0x7E00
  0x6500--0x68FF  0xE500--0xE8FF   0x8000
  0x6900--0x6AFF  0xFE00--0xFFFF   0x9500
UniCodeToGBTable数组包含了6763个汉字、国际符号、无效字符三种情况的Unicode编码到GB2312编码的转换数据,我们可以通过创建一个Unicode编码字符在UniCodeToGBTable数组中对应的GB2312编码的位置的定位数组来实现对一个字符的编码转换。
Unicode编码到GB2312的编码转换表通过国际符号、中文字符、无效字符三部分分成8个区间组合来实现,其中国际符号为6个区间,中文字符为1个区间,无效字符为1个区间。Unicode编码的区间定位表采用国际符号、中文字符、无效字符的定位偏移量来组成。
国际符号的Unicode编码定位分为6个不连续区间来实现,6个区间通过不同的偏移量来实现,不同的偏移量对应编码转换表中不同的区间。
无效字符的Unicode编码定位分为6个不连续区间来实现,6个区间通过不同的偏移量来实现,所有无效字符对应的GB2312编码位置相同;所有无效字符对应的GB2312编码位置相同,是无效字符编码区间。
通过Unicode编码的区间定位表获取字符Unicode编码对应的不同偏移量,在Unicode编码到GB2312的编码转换表的不同区间获取字符对应的GB2312编码;
Unicode编码的区间定位表由uniToGBPosition数组实现。Unicode编码数据按0xFF个数据分为一组,总计0x0000--0xFFFF个Unicode编码数据可以分为0xFF组,某个字符高八位数据就对应着Unicode编码的分组,例如Unicode编码0x4E98就位于0x4E分组。uniToGBPosition包含256个元素,每个元素值就是对应分组的偏移值,如果一个Unicode编码对应的分组的偏移值为0x0100*(n-5),那么这个Unicode编码转换后的GB2312编码在UniCodeToGBTable数组中的位置下标就是0x0500--0x05FF之间,就是无效符号,从表2的第2列可以得出这样的分组共有0x96个,这样编码转换数组相对于第一种转换方法节约了0x9500*2个字节的空间。表2是uniToGBPosition数组的标和值的元素值的对应图,n为下标。
表2
  元素下标(十六进制)   元素值(十六进制)
  0x00-0x04   0x0000
  0x5--0x1F   0x0100*(n-5)
  0x20--0x26   0x1A00
  0x27--0x2F   0x0100*(n-5)
  0x30--0x32   0x2300
  0x33--0x4D   0x0100*(n-5)
  0x4E--0x9F   0x3E00
  0xA0--0xDF   0x0100*(n-5)
  0xE0--0xE2   0x7E00
  0xE3--0xE4   0x0100*(n-5)
  0xE5--0xE8   0x8000
  0xE9--0xFD   0x0100*(n-5)
  0xFE--0xFF   0x9500
从UniCodeToGBTable数组和uniToGBPosition数组的创建原理可以得出编码转换公式,假设一个符号的Unicode编码值为source(2个字节),其转换为GB2312后的编码值为dest(2个字节)。那么用C语言表示的公式为:
dest=UniCodeToGBTable[source-uniToGBPosition[source>>8]]。
请参阅图1。本发明Unicode编码到GB2312编码转换方法的步骤如下:
步骤1:读取存储在嵌入式电子设备ROM中字符的Unicode编码;
步骤2:将该字符的Unicode编码右移8位,获取Unicode编码的高8位数据;
步骤3:以步骤2的高8位数据为下标,获取uniToGBPosition数组的元素值,即偏移量;
步骤4:使用字符的Unicode编码值减去步骤3所得的偏移量,得到差值;
步骤5:以步骤4所的差值为下标,在UniCodeToGBTable数组中获取到对应的元素值,存储在嵌入式电子设备RAM中;
步骤5所得的元素值就是该字符的GB2312编码,可以用来进行字符显示或者数据传输等。
一个简单的例子如下:
1、对于存储在ROM中的字符
Figure A20081020296900071
该字符以Unicode编码形式存储,为0xFE3E;
2、对Unicode码右移8位,得到结果为0xFE,十进制为254;
3、计算偏移量uniToGBPosition[254]=0x9500;
4、计算差值0xFE3E-0x9500=0x693E;
5、计算UniCodeToGBTable[0x693E]=0xA6E7,存储在RAM中;
6、利用字符
Figure A20081020296900072
的GB2312编码值0xA6E7通过GB编码字库显示或者进行传输。
对于字符
Figure A20081020296900073
的从Unicode到GB2312的转换方法,如果使用背景技术的第一种方法,占用ROM空间会增加一倍以上;使用背景技术的第二种方法则转换时间会增加数倍。
本发明提出了一种简单可靠且效率较高的Unicode编码到GB2312编码的转换方案。使用了8个Unicode编码区间的组合方式来减小UniCodeToGBTable存储空间,使用13个编码区间的偏移量和其他无效字符编码区间的偏移量来组成uniToGBPosition数组。通过数组uniToGBPosition定位字符Unicode编码的偏移量,根据此偏移量在数组UniCodeToGBTable中定位字符的GB2312编码。
以上所述仅为本发明的较佳实施例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应为本发明的技术范畴。

Claims (5)

1、一种Unicode编码到GB2312编码转换方法,其特征在于包括以下步骤:
步骤1:读取存储在嵌入式电子设备的第一存储设备中的一字符的Unicode编码;
步骤2:将所述字符的Unicode编码右移8位,获取该Unicode编码的高8位数据;
步骤3:以步骤2的高8位数据为下标,在区间定位表中获取偏移量;
步骤4:使用所述字符的Unicode编码值减去步骤3所得的偏移量,得到差值;
步骤5:以步骤4所得差值为下标,在编码转换表中获取该字符的GB2312编码,存储在嵌入式电子设备的第二存储设备中。
2、根据权利要求1所述的转换方法,其特征在于步骤1所述的第一存储设备是ROM。
3、根据权利要求1所述的转换方法,其特征在于步骤5所述的第二存储设备是RAM。
4、根据权利要求1至3中任一权利要求所述的转换方法,其特征在于所述的Unicode编码到GB2312的编码转换表通过国际符号、中文字符、无效字符三部分分成8个区间组合来实现,其中国际符号为6个区间,中文字符为1个区间,无效字符为1个区间。
5、根据权利要求1至3中任一权利要求所述的转换方法,其特征在于Unicode编码的区间定位表采用国际符号、中文字符、无效字符的定位偏移量来组成。
CNA2008102029691A 2008-11-19 2008-11-19 一种Unicode编码到GB2312编码转换方法 Pending CN101404007A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2008102029691A CN101404007A (zh) 2008-11-19 2008-11-19 一种Unicode编码到GB2312编码转换方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2008102029691A CN101404007A (zh) 2008-11-19 2008-11-19 一种Unicode编码到GB2312编码转换方法

Publications (1)

Publication Number Publication Date
CN101404007A true CN101404007A (zh) 2009-04-08

Family

ID=40538028

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2008102029691A Pending CN101404007A (zh) 2008-11-19 2008-11-19 一种Unicode编码到GB2312编码转换方法

Country Status (1)

Country Link
CN (1) CN101404007A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101969498A (zh) * 2010-08-31 2011-02-09 浙江大学 盲文短信打印装置
CN102541822A (zh) * 2010-12-21 2012-07-04 航天信息股份有限公司 通信过程中汉字的处理方法和装置
CN102609510A (zh) * 2012-02-06 2012-07-25 中国农业银行股份有限公司 一种中文姓名数据处理方法和装置
CN103914436A (zh) * 2013-01-09 2014-07-09 国际商业机器公司 提供较小目标编码空间的码转换方法、计算机装置和程序产品
US9684654B2 (en) 2012-03-30 2017-06-20 International Business Machines Corporation Performing a code conversion in a smaller target encoding space
CN109829328A (zh) * 2018-12-19 2019-05-31 上海晶赞融宣科技有限公司 数据脱敏、逆脱敏方法及装置、存储介质、终端
CN111428441A (zh) * 2020-03-18 2020-07-17 中国电子科技集团公司第二十八研究所 面向信息系统跨平台应用的汉字编码转换方法及设备
CN113473467A (zh) * 2021-08-03 2021-10-01 深圳市火火兔智慧科技有限公司 Iot设备配网方法、装置、计算机设备及存储介质

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101969498A (zh) * 2010-08-31 2011-02-09 浙江大学 盲文短信打印装置
CN102541822A (zh) * 2010-12-21 2012-07-04 航天信息股份有限公司 通信过程中汉字的处理方法和装置
CN102541822B (zh) * 2010-12-21 2014-07-02 航天信息股份有限公司 通信过程中汉字的处理方法和装置
CN102609510A (zh) * 2012-02-06 2012-07-25 中国农业银行股份有限公司 一种中文姓名数据处理方法和装置
CN102609510B (zh) * 2012-02-06 2014-05-28 中国农业银行股份有限公司 一种中文姓名数据处理方法和装置
US9684654B2 (en) 2012-03-30 2017-06-20 International Business Machines Corporation Performing a code conversion in a smaller target encoding space
US10545924B2 (en) 2012-03-30 2020-01-28 International Business Machines Corporation Performing a code conversion in a smaller target encoding space
US11675744B2 (en) 2012-03-30 2023-06-13 International Business Machines Corporation Performing a code conversion in a smaller target encoding space
CN103914436A (zh) * 2013-01-09 2014-07-09 国际商业机器公司 提供较小目标编码空间的码转换方法、计算机装置和程序产品
CN109829328A (zh) * 2018-12-19 2019-05-31 上海晶赞融宣科技有限公司 数据脱敏、逆脱敏方法及装置、存储介质、终端
CN111428441A (zh) * 2020-03-18 2020-07-17 中国电子科技集团公司第二十八研究所 面向信息系统跨平台应用的汉字编码转换方法及设备
CN111428441B (zh) * 2020-03-18 2024-01-19 中国电子科技集团公司第二十八研究所 面向信息系统跨平台应用的汉字编码转换方法及设备
CN113473467A (zh) * 2021-08-03 2021-10-01 深圳市火火兔智慧科技有限公司 Iot设备配网方法、装置、计算机设备及存储介质

Similar Documents

Publication Publication Date Title
CN101404007A (zh) 一种Unicode编码到GB2312编码转换方法
Gill et al. China's expanding role in peacekeeping: Prospects and policy implications
CN102592160B (zh) 一种面向短信的字符二维码编码方法和解码方法
WO2006133407A3 (en) Data compression using a stream selector with edit-in-place capability for compressed data
CN105634499A (zh) 一种基于新短浮点型数据的数据转换方法
CN102999773B (zh) 一种彩色格点码图及其三维条码编码方法
CN105450232A (zh) 编码、解码方法以及编码装置和解码装置
CN104102690B (zh) 一种基于存储结构的遥测数据处理方法
CN102750337A (zh) 字库的制作方法和装置
CN101483779A (zh) 一种二维矢量地图的压缩方法
CN103869964A (zh) 一种二维码中文字符输入计算机的设备
Hindrichs et al. Plusminus 20/40 latitude: sustainable building design in tropical and subtropical regions
CN101345952A (zh) 客户身份识别卡的数据存储、读取方法、装置及系统
CN101382931A (zh) 一种用于电子、信息及通信系统的交换内码及其应用
CN105046306A (zh) 一种包含多种生物特征信息的彩色多维码编码方法
CN102063416A (zh) 向pdf文件内嵌双字节字体的方法及其系统
CN101777283A (zh) 城乡地址数字化地图及门牌和公交车站牌
CN101510375B (zh) 电子地图数据文件的处理方法
CN107463355B (zh) 立即数压缩编码方法和系统
CN203397399U (zh) 一种指纹考勤仪
CN101324880A (zh) 一种文字编码的转换方法及转换系统
WO2001093180A8 (fr) Procede de saisie de codes operationnels par numerisation des informations concernant les differents alphabets ou symboles graphiques et systeme connexe de traitement desdites informations
CN102664634A (zh) 一种用于北斗收发汉字文本消息时的数据压缩方法
CN1416043A (zh) 一种计算机汉字输入方法
Byrohl Understanding Lyman-alpha observations with IllustrisTNG

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20090408