查表法字符编码转换

最近碰到字符编码转换的问题,记得2年前在symbian和45度地图编辑器上曾使用过,但时间一长就都忘记了,最后g了半天才搞定,特此记录如下,免得以后用到的时候又找不着。。。

常见需要转换的编码大致可分为unicode和非unicode编码,比如:utf16、utf8、gb2312-80、gbk、big5

编码间相互转换规律:

  1. utf16与utf8之间可通过算法直接转换等到、具体算法见代码。
  2. utf16与非unicode编码间可通过查表法转换得到,编码映射表可通过unihan.txt文件提取得到,例如utf16转换到gb2312-80的映射表可使用字段kGB0(注意这里的kGB0字段是十进制的区位码,在使用时需要转换为内码,具体转换算法见下一点)unihan.txt文件还有许多其他的用途,这里不做多说,若有兴趣请参见《UNICODE汉字数据库.doc》一文。
  3. 区位码到内码的转换,unihan.txt文件中kGBn系列属性中给出的区位码数据是十进制的,共有四位,其中前两位代表区码,后两位代表位码。在把它们转换为实际的GB内码的时候,应该把区、位码分开来处理。比如汉字“一”的GB 2312-80区位码是5027,则它的GB 2312-80内码计算过程如下:
    0x32(50的十六进制形式,5027/100)+0xA0=0xD2,此即为内码高字节的值
    0x1B(27的十六进制形式,5027%100)+0xA0=0xBB,此即为内码低字节的值

好了,原理清楚代码就没什么问题了,我也比较懒,拣了几个现成的函数,来自网友qiaobin : )

还有就是代码中没有包含两个字符映射表,实在是太大了,每个6000多行。。需要的还是自己到unihan.txt里提取吧。

 

代码下载

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值