UTF-8, Unicode, GB2312格式串转换之C语言版---转

 

UTF-8, Unicode, GB2312格式串转换之C语言版

      (申明:此文章属于原创,若转载请表明作者和原处链接 )      

      /*      author:   wu.jian   (吴剑)      English name: Sword

      /*      date:      2007-12-13

      /*      purpose:   知识共享

 

      这几天工作上碰到了UTF-8转GB2312的问题,而且是在嵌入式的环境下,没有API可用,查了很多网上的资料,大多调用VC或者linux下自带的接口。在这里我将这两天的工作做个总结。

      总的来说分为两大步(这里就不介绍基础知识了):

 

      一、UTF8 -> Unicode

      由于UTF8和Unicode存在着联系,所以不需要任何库就可以直接进行转换。首先要看懂UTF8的编码格式:

      U-00000000 - U-0000007F: 0xxxxxxx  

      U-00000080 - U-000007FF: 110xxxxx 10xxxxxx  

      U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx  

      U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  

      U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  

      U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  

      前面几个1就代表后面几个字节是属于一起的。如果要解析一长串UTF8格式的字符串,这点就很有用了。下面这个函数就是判断前面几个1的(这里有define APP_PRINT printf,这样当release的时候将这个宏定义为空就行了,不需要一个一个去改,又方便重新调试):

      int GetUtf8ByteNumForWord(u8 firstCh)

      {

          u8 temp = 0x80;

          int num = 0;

 

          while (temp & firstCh)

          {

                num++;

                 temp = (temp >> 1);

           }

 

       APP_PRINT("the num is: %d", num);

        return num;

      }

      利用这个函数可以得到字符串中那几个字节是一起的。因为UTF8最大只有6个字节,所以就根据返回值来处理这里我只处理了3个字节和1个字节的UTF8的编码,因为一般来说中文在UTF8中是3个字节。

 

//将len个字节的UTF8格式的转换成GB2312格式存放在temp预先申请好的缓冲区中

void Utf8ToGb2312(const char* utf8, int len, char *temp)

{

       APP_PRINT("utf8->unicode: /n");

       APP_PRINT("utf8: [");

       for (int k = 0; k < len; k&#

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值