Kanji_Code_Converter_assisted_tools_SourceCode

所属分类:其他小程序
开发工具:Visual C++
文件大小:1280KB
下载次数:8
上传日期:2009-03-11 11:27:47
上 传 者新蛮狼
说明:  利用VC自动生成了汉字内码转换所需要的转换表以及头文件,生成的转换表和头文件可用于嵌入式系统开发编码转换使用.可作为类似编码转换应用的参考代码.详见readme.txt
(Using VC ,automatically generated by the conversion of Chinese characters within the code conversion table and the necessary header files to generate the conversion table and header files can be used for embedded system development using the data conversion. Similar coding can be used as a reference code conversion applications. See readme.txt)

文件列表:
汉字内码转换辅助工具集程序\TB_X2BIG5\StdAfx.h (769, 2008-03-31)
汉字内码转换辅助工具集程序\TB_X2BIG5\StdAfx.cpp (296, 2008-03-31)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_X2BIG5.dsp (4572, 2008-03-31)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_X2BIG5.plg (1326, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_LE_UTF16_BIG5.bin (131072, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_BE_UTF16_BIG5.bin (131072, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\UTF16_BIG5_2B_H.txt (459779, 2008-04-03)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_LE_GB_BIG5.bin (65024, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_BE_GB_BIG5.bin (65024, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\GB_BIG5_2B_H.txt (228128, 2008-04-21)
汉字内码转换辅助工具集程序\TB_X2BIG5\ErrLog.txt (120008, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\UTF16_BIG5_2B_H.h (459815, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\TB_X2BIG5.cpp (7103, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\GB_BIG5_2B_H.h (228128, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\vc60.idb (82944, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\TB_X2BIG5.pch (203752, 2008-03-31)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\vc60.pdb (126976, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\StdAfx.obj (2056, 2008-03-31)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\TB_X2BIG5.ilk (203780, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\TB_X2BIG5.exe (159820, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\TB_X2BIG5.pdb (443392, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug\TB_X2BIG5.obj (27816, 2008-04-22)
汉字内码转换辅助工具集程序\TB_X2BIG5\Debug (0, 2009-03-10)
汉字内码转换辅助工具集程序\TB_X2BIG5 (0, 2009-03-10)
汉字内码转换辅助工具集程序\tools2\StdAfx.h (769, 2008-03-28)
汉字内码转换辅助工具集程序\tools2\StdAfx.cpp (293, 2008-03-28)
汉字内码转换辅助工具集程序\tools2\tools2.dsp (4536, 2008-03-28)
汉字内码转换辅助工具集程序\tools2\tools2.plg (1299, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\TB_LE_BIG5_GB.bin (65024, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\TB_BE_BIG5_GB.bin (65024, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\TB_LE_BIG5_GB_4B.bin (0, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\BIG5_GB_2B_H.txt (228095, 2008-04-03)
汉字内码转换辅助工具集程序\tools2\TB_BE_BIG5_GB_4B.bin (0, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\BIG5_GB_4B_H.Txt (0, 2008-04-03)
汉字内码转换辅助工具集程序\tools2\ErrLog.Txt (3840, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\BIG5_GB_2B_H.h (228127, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\BIG5_GB_4B_H.h (0, 2008-04-18)
汉字内码转换辅助工具集程序\tools2\tools2.cpp (5027, 2008-04-17)
... ...

一.目前使用的汉字编码,有GB2312,GBK,GB18030,BIG5码,Unicode码,而Unicode码又可按照不同的存储格式分成UTF-8,UTF-16,UTF-32等格式.在嵌入式系统应用中,需要脱离库函数等进行汉字内码转换,这样可能需要一个小体积的汉字转换表,本套辅助工具利用VC自动生成了内码转换所需要的转换表,包含UTF16->GB18030,BIG5->G18030, UTF16 -> BIG5,UTF16 -> BIG5,GB18030 -> BIG5,便于用户进一步编程进行内码转换. 二,创建转换表的项目说明 1)UTF16->GB18030的转换表创建 项目文件为: ..\软件\tools1\tools1.dsp 总体思想是,UTF16的16位字可以用2字节表示,高字节对应高8位,低字节对应低8位,生成一个二维数组TB_UTF16_GB[256][256],其数组元素的第一维为UTF16编码的高字节,第二维为UTF16编码的低字节,而数组元素的值即为该UTF16编码对应的GB18030编码.但GB18030编码最大为4字节,因为空间限制为节约存储空间,数组元素只存储2字节的GB18030编码,而且为了转换方便快速,将此2字节合并成一个16位字, 高字节对应高8位,低字节对应低8位,如果转换后的编码大于2字节,则数组里存储的是前2字节,而后2字节合并成一个16位字合并成一个字放在另外一个数组TB_UTF16_GB_4B[]里.这样做(而不是遇4字节结果时将数组元素值置特定标志,再将全部4字节放入TB_UTF16_GB_4B数组)是为了减小TB_UTF16_GB_4B的大小,节约空间. 因为可事先知道UTF16转换成4字节GB18030编码部分编码是有规律的,所以转换时判断转换结果含几个字节由此规律判断即可,此法可行.但是因为转换结果并不连续,所以采用一维数组,数组元素的数据结构UTF16_GB_4B,包含每个有效的转换对(如下),查询时根据匹配UTF16_GB_4B. unicode找到转换结果. 数据结构: typedef struct utf16_gb { U16 unicode; U16 gb; } UTF16_GB_4B; U16 TB_UTF16_GB[][256]; UTF16_GB_4B TB_UTF16_GB_4B[]; 即使分成两个数组,如果将所有UTF16->GB18030四字节的结果收录进TB_UTF16_GB_4B[]数组,仍然超出项目的空间限制.而实际情况,目前的GB18030字库只收录了四字节编码的汉字部分,所以将转换结果缩小至汉字,查询可知符号这样要求的UTF16编码位于CJK统一汉字扩段A (0x3400-0x4DB5).经过这样处理,转换表大小就符合空间要求了. 生成转换结果使用微软的库函数:WideCharToMultiByte(54936,NULL,&u16Data,1,(LPSTR)pu8OutData,4,NULL,NULL); 转换失败时,将结果统一填写为0. 测试过程中发现WideCharToMultiByte(54936,...)不能将GBK增补的80个字符正确转换.这80个字符的码位是0xFE50-0xFEA0,本来是放在PUA区(对应0xE815-0xE8***)的,后来又被Unicode收录。所以既可以用PUA区的编码表示,也可以用非PUA编码表示。手动补上其正确转换结果. 对于供RAM使用的转换表,直接生成符合C标准的头文件,包含以上数组,其中一些小技巧详见程序注释.对应供ROM使用的转换表,则是将生成结果以二进制格式直接输出成二进制文件,供今后写flash.为了转换方便快速,转换程序将2字节合并成一个16位字读写,所以对应于big/Little Endian编码规划,有不同的格式输出. 输出的转换表文件有: UTF16_GB_2B_H.h ,对应供RAM使用的可编译头文件, GB18030的2 Bytes部分 UTF16_GB_4B_H.h ,对应供RAM使用的可编译头文件, GB18030的4 Bytes部分 TB_LE_UTF16_GB.bin, 对应Little Endian 项目的ROM转换表, GB18030的2 Bytes部分 TB_LE_UTF16_GB_4B.bin, 对应Little Endian 项目ROM转换表, GB18030的4 Bytes部分 TB_BE_UTF16_GB.bin, 对应Big Endian 项目的ROM转换表, GB18030的2 Bytes部分 TB_BE_UTF16_GB_4B.bin, 对应Big Endian 项目ROM转换表, GB18030的4 Bytes部分 2)BIG5->G18030的转换表创建 项目文件为: ..\软件\tools2\tools2.dsp 总体思想与UTF16->GB18030的转换表创建类似, 生成一个二维数组TB_BIG5_GB[][256],不过BIG5编码是从0x8140开始的,为节约空间和换算方便,从0x8100开始转换,这样其数组元素的第一维为(BIG5编码的高字节-0X81),第二维为BIG5编码的低字节.4字节部分与UTF16->GB18030的转换表类似,但实际转换过程中发现所有的BIG5编码都在2字节区,所以输出结果略去4字节转换部分. 数据结构: U16 TB_BIG5_GB[][256]; 因为微软的库函数里没有直接从BIG5编码转换到GB18030的函数,所以先将BIG5编码转换为Unicode码,再将此Unicode码转换到GB18030码.即生成转换结果使用微软的库函数: MultiByteToWideChar(950, 0, (LPCSTR )pu8Indata, 2, (LPWSTR)&u16Data,1)和WideCharToMultiByte(54936,NULL,&u16Data,1,(LPSTR)pu8OutData,4,NULL,NULL); 转换失败时,将结果统一填写为0. 输出的转换表文件有: BIG5_GB_2B_H.h ,对应供RAM使用的可编译头文件, BIG5->GB18030 TB_LE_ BIG5_GB.bin, 对应Little Endian 项目的ROM转换表, BIG5->GB18030 TB_BE_ BIG5_GB.bin, 对应Big Endian 项目的ROM转换表, BIG5->GB18030 3) UTF16 -> BIG5的转换表创建 项目文件为: ..\软件\ TB_X2BIG5\TB_X2BIG5.dsp 总体思想前面UTF16->GB18030类似, 只是BIG5编码都是2字节的,无需4字节转换表.生成一个二维数组TB_UTF16_BIG5[256][256] , 其数组元素的第一维为UTF16编码的高字节,第二维为UTF16编码的低字节,而数组元素的值即为该UTF16编码对应的BIG5编码. 而且为了转换方便快速,将此BIG5编码2字节合并成一个16位字, 高字节对应高8位,低字节对应低8位. 同样, 对于供RAM使用的转换表,直接生成符合C标准的头文件,包含以上数组,其中一些小技巧详见程序注释.对应供ROM使用的转换表,则是将生成结果以二进制格式直接输出成二进制文件,对应于big/Little Endian编码规划,有不同的格式输出. 生成转换结果使用微软的库函数: WideCharToMultiByte(950,NULL,&u16Data,1,(LPSTR)pu8OutData,4,NULL,NULL); 转换失败时,将结果统一填写为0. 数据结构: U16 TB_UTF16_BIG5 [][256]; 输出的转换表文件有: UTF16_BIG5_2B_H.h ,对应供RAM使用的可编译头文件, UTF16 -> BIG5 TB_LE_UTF16_BIG5.bin, 对应Little Endian 项目的ROM转换表, UTF16 -> BIG5 TB_BE_UTF16_BIG5.bin, 对应Big Endian 项目的ROM转换表 , UTF16 -> BIG5 4) GB18030->BIG5的转换表创建 项目文件为: ..\软件\ TB_X2BIG5\TB_X2BIG5.dsp 因为从前面的转换结果已经发现,4字节的GB18030编码无对应BIG5码,所以只需考虑2字节的GB18030码转换.总体思想前面类似, 生成一个二维数组TB_ GB_BIG5 [][256],不过,为节约空间和换算方便,从0x8100开始转换,这样其数组元素的第一维为GB编码的高字节减去0x81,第二维为GB编码的低字节. . 数据结构: TB_ GB_BIG5 [][256]; 因为微软的库函数里没有直接从GB18030编码转换到BIG5的函数,所以先将GB18030编码转换为Unicode码,再将此Unicode码转换到BIG5码.即生成转换结果使用微软的库函数: MultiByteToWideChar(54936,0, (LPCSTR )pu8Indata, 2, (LPWSTR)&u16Data,1)和WideCharToMultiByte(950, NULL,&u16Data,1,(LPSTR)pu8OutData,4,NULL,NULL); 转换失败时,将结果统一填写为0. 输出的转换表文件有: GB_BIG5_ 2B_H.h ,对应供RAM使用的可编译头文件, GB18030->BIG5 TB_LE_ GB _BIG5.bin, 对应Little Endian 项目的ROM转换表, GB18030->BIG5 TB_BE_ GB _BIG5.bin, 对应Big Endian 项目的ROM转换表, GB18030->BIG5

近期下载者

相关文件


收藏者