unicode码表和转换程序
大牛们拿去研究看能应用上不能,节省时间出成绩啊,呵呵
unicode到gbk的转换程序
unsigned char Unicode_to_GBK(unsigned char *ch)
{
unsigned int temp;
unsigned int sector_offset;//扇区偏移
unsigned int byte_offset;//字节偏移
unsigned char buffer[512];
temp = *((unsigned int*)ch);//由于FAT中文件民unicode码是 地字节在前,所以要按uint型读
temp -= 0x4e00;//减去基础数据
temp *= 2;//每个汉字两个字节
sector_offset = temp/BytesPerSector;//计算出扇区偏移,确定存在哪个扇区
byte_offset = temp%BytesPerSector;//存在哪个字节
if(FAT_ReadSector(UNI2GBK + sector_offset,buffer))return 1;//读那个扇区
*ch = buffer[byte_offset];//将数据读出
*(ch+1) = buffer[byte_offset+1];
return 0;
}
要注意的是FAT中文件名的存放方式是低字节在前,而gbk的存放是高字节在前,操作时不要搞混了。
附件1是两个字库
两者之间的转化这能通过查表,两者没有对应关系。所以要建一张unicode-2312的对照表。
当然如过想节省程序运行时间,要建两张表,分别按照各自的线性关系放,这样就免去查找的所耗的时间了。但是这样字库就会变大。我觉得用空间去换取速度可行。
附件2是两个转换好的码表
uni2gbk.sys为unicode转gbk的表,从unicode的0x4e00 到0x9fa5 顺序存放着相应的gbk码,总共20902个汉字,对应的文件是41804Bytes
注:由于没有找到一些符号的unicode对照表,因此这张表中只包含了汉字部分。因此不能显示诸如“”()等符号,程序中要做相应处理。
注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00
gbk2uni.sys为gbk转unicode的表,从gbk的0x8140 到0xfeff 即126*192 = 24192按照gbk的编码顺序放,为了线形查找,其中不合法的或根据资料没有相应unicode码的都作了填零处理。文件大小为48384Bytes
注文件存放方式是高字节在前 比如0x4e00 存放方式为0x4e 0x00
附件: 您所在的用户组无法下载或查看附件