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

文档序号:6469406阅读:846来源:国知局

专利名称::一种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编码转换方法,包括以下步骤步骤h读取存储在嵌入式电子设备的第一存储设备中的一字符的Unicode编码;步骤2:将所述字符的Unicode编码右移8位,获取该Unicode编码的高8位数据;步骤3:以步骤2的高8位数据为下标,在区间定位表中获取偏移量;步骤4:使用所述字符的Unicode编码值减去步骤3所得的偏移量,得到差值;步骤5:以步骤4所得差值为下标,在编码转换表中获取该字符的GB2312编码,存储在嵌入式电子设备的第二存储设备中。步骤1所述的第一存储设备是R0M。步骤5所述的第二存储设备是RAM。所述的Unicode编码到GB2312的编码转换表通过国际符号、中文字符、无效字符三部分分成8个区间组合来实现,其中国际符号为6个区间,中文字符为l个区间,无效字符为l个区间。Unicode编码的区间定位表采用国际符号、中文字符、无效字符的定位偏移量来组成。与现有技术相比,本发明的有益效果是本发明接口简单可靠,实现非常方便,对于手机等嵌入式电子设备具有较强通用性和实用性,可以有效的减少存储空间的使用,提高效率。图l是本发明方法的流程图。具体实施方式下面结合附图和实施例对本发明的具体实施方式做进一步详细的说明,但不应以此限制本发明的保护范围。Unicode编码到GB2312的编码转换表由UniCodeToGBTable数组实现,UniCodeToGBTable是一个有0x6B00个元素的数组,每个元素为2个字节;数组的创建根据国际符号的Unicode分布区间大体为0x0000-0x04FF,0x2000--0x26FF,0x3000—0x32FF,OxE000—0xE2FF,0xE500--0xE8FF,OxFE00--OxFFFF共6个区间,中文字符的Unicode分布区间在0x4E00—0x9FFF,无效字符的区间用0x0500—0x05FF来代表实现,总共8个区间。按照Unicode编码值的顺序将上面8个区间的值对应的GB2312编码连接起来创建UniCodeToGBTable数组。对于Unicode编码在0x0000-0x04FF,0x2000--0x26FF,0x3000--0x32FF,0x4E00—0x9FFF,0xE000—0xE2FF,0xE500--0xE8FF,OxFE00--0xFFFF共7个区间中的符号,数组元素的GB2312编码值对应的Unicode编码值相对于数组下标分别偏移了0x0000,OxlAOO,0x2300,0x3E00,0x7E00,0x8000,0x9500,相对于
背景技术
的第一种转换方法使用一个完整的Unicode编码到GB2312编码的转换数组节约了0x9500*2=74.5K字节的空间。UniCodeToGBTable数组的元素为表l中第2列的Unicode编码值对应的GB2312编码。表l是UniCodeToGBTable数组的下标、元素以及偏移值对照图。表l元素下标(十六进制)对应的Unicode编码值(十六进制)偏移值(十六进制)0x0000-0x04FF0x0000-0x04FF0x00000x0500-0x05FF无效值0x0600--OxOCFF0x2000--0x26FFOxlAOOOxOD00--OxOFFF0x3000--0x32FF0x23000x1000--0x6IFF0x4E00--0x9FFF0x3E000x6200--0x64FFOxE000--0xE2FF0x7E000x6500--0x68FF0xE500--0xE8FF0x80000x6900—0x6AFFOxFEOO--OxFFFF0x9500UniCodeToGBTable数组包含了6763个汉字、国际符号、无效字符三种情况的Unicode编码到GB2312编码的转换数据,我们可以通过创建一个Unicode编码字符在UniCodeToGBTable数组中对应的GB2312编码的位置的定位数组来实现对一个字符的编码转换。Unicode编码到GB2312的编码转换表通过国际符号、中文字符、无效字符三部分分成8个区间组合来实现,其中国际符号为6个区间,中文字符为l个区间,无效字符为1个区间。Unicode编码的区间定位表采用国际符号、中文字符、无效字符的定位偏移量来组成。国际符号的Unicode编码定位分为6个不连续区间来实现,6个区间通过不同的偏移量来实现,不同的偏移量对应编码转换表中不同的区间。无效字符的Unicode编码定位分为6个不连续区间来实现,6个区间通过不同的偏移量来实现,所有无效字符对应的GB2312编码位置相同;所有无效字符对应的GB2312编码位置相同,是无效字符编码区间。通过Unicode编码的区间定位表获取字符Unicode编码对应的不同偏移量,在Unicode编码到GB2312的编码转换表的不同区间获取字符对应的GB2312编码;Unicode编码的区间定位表由uniToGBPosition数组实现。Unicode编码数据按OxFF个数据分为一组,总计0x0000--OxFFFF个Unicode编码数据可以分为OxFF组,某个字符高八位数据就对应着Unicode编码的分组,例如Unicode编码0x4E98就位于0x4E分组。uniToGBPosition包含256个元素,每个元素值就是对应分组的偏移值,如果一个Unicode编码对应的分组的偏移值为0x0100"n-5),那么这个Unicode编码转换后的GB2312编码在UniCodeToGBTable数组中的位置下标就是0x0500--0x05FF之间,就是无效符号,从表2的第2列可以得出这样的分组共有0x96个,这样编码转换数组相对于第一种转换方法节约了0x950(^2个字节的空间。表2是uniToGBPosition数组的标和值的元素值的对应图,n为下标。表2元素下标(十六进制)元素值(十六进制)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数组和uniToGBPosition数组的创建原理可以得出编码转换公式,假设一个符号的Unicode编码值为source(2个字节),其转换为GB2312后的编码值为dest(2个字节)。那么用C语言表示的公式为dest=UniCodeToGBTable[source-uniToGBPosition[source》8]]。请参阅图1。本发明Unicode编码到GB2312编码转换方法的步骤如下步骤h读取存储在嵌入式电子设备ROM中字符的Unicode编码;步骤2:将该字符的Unicode编码右移8位,获取Unicode编码的高8位数据;步骤3:以步骤2的高8位数据为下标,获取uniToGBPosition数组的元素值,即偏移量;步骤4:使用字符的Unicode编码值减去步骤3所得的偏移量,得到差值;步骤5:以步骤4所的差值为下标,在UniCodeToGBTable数组中获取到对应的元素值,存储在嵌入式电子设备RAM中;步骤5所得的元素值就是该字符的GB2312编码,可以用来进行字符显示或者数据传输等。一个简单的例子如下1、对于存储在ROM中的字符'《',该字符以Unicode编码形式存储,为0xFE3E;2、对Unicode码右移8位,得到结果为0xFE,十进制为254;3、计算偏移量uniToGBPosition[254]=0x9500;4、计算差值0xFE3E—0x9500=0x693E;5、计算UniCodeToGBTable=0xA6E7,存储在RAM中;6、利用字符'《'的GB2312编码值0xA6E7通过GB编码字库显示或者进行传输。对于字符'^'的从Unicode到GB2312的转换方法,如果使用
背景技术
的第一种方法,占用ROM空间会增加一倍以上;使用
背景技术
的第二种方法则转换时间会增加数倍。本发明提出了一种简单可靠且效率较高的Unicode编码到GB2312编码的转换方案。使用了8个Unicode编码区间的组合方式来减小UniCodeToGBTable存储空间,使用13个编码区间的偏移量和其他无效字符编码区间的偏移量来组成uniToGBPosition数组。通过数组uniToGBPosition定位字符Unicode编码的偏移量,根据此偏移量在数组UniCodeToGBTable中定位字符的GB2312编码。以上所述仅为本发明的较佳实施例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应为本发明的技术范畴。权利要求1、一种Unicode编码到GB2312编码转换方法,其特征在于包括以下步骤步骤1读取存储在嵌入式电子设备的第一存储设备中的一字符的Unicode编码;步骤2将所述字符的Unicode编码右移8位,获取该Unicode编码的高8位数据;步骤3以步骤2的高8位数据为下标,在区间定位表中获取偏移量;步骤4使用所述字符的Unicode编码值减去步骤3所得的偏移量,得到差值;步骤5以步骤4所得差值为下标,在编码转换表中获取该字符的GB2312编码,存储在嵌入式电子设备的第二存储设备中。2、根据权利要求1所述的转换方法,其特征在于步骤1所述的第一存储设备是R0M。3、根据权利要求1所述的转换方法,其特征在于步骤5所述的第二存储设备是RAM。4、根据权利要求1至3中任一权利要求所述的转换方法,其特征在于所述的Unicode编码到GB2312的编码转换表通过国际符号、中文字符、无效字符三部分分成8个区间组合来实现,其中国际符号为6个区间,中文字符为l个区间,无效字符为1个区间。5、根据权利要求1至3中任一权利要求所述的转换方法,其特征在于Unicode编码的区间定位表采用国际符号、中文字符、无效字符的定位偏移量来组成。全文摘要本发明公开了一种Unicode编码到GB2312编码转换方法,其特征在于包括以下步骤步骤1读取存储在嵌入式电子设备的第一存储设备中的一字符的Unicode编码;步骤2将所述字符的Unicode编码右移8位,获取该Unicode编码的高8位数据;步骤3以步骤2的高8位数据为下标,在区间定位表中获取偏移量;步骤4使用所述字符的Unicode编码值减去步骤3所得的偏移量,得到差值;步骤5以步骤4所得差值为下标,在编码转换表中获取该字符的GB2312编码,存储在嵌入式电子设备的第二存储设备中。本发明可以有效的减少存储空间的使用,提高效率。文档编号G06F17/22GK101404007SQ200810202969公开日2009年4月8日申请日期2008年11月19日优先权日2008年11月19日发明者郭贵军申请人:闻泰集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1