mac下utf-8转unicode

项目需要在mac下发送一段unicode数据,试用过mac自带的libiconv 每个字符确占有四个字节,上传到服务器后返回结果不对。从网上找了一段代码,稍加修改,在虚拟机上运行正确。 unsigned short int 占两个字节,符合unicode内存要求。 

 int myUTF8_to_UNICODE(unsigned short int * unicode, unsigned char* utf8, int len)
{
    int length;
    unsigned char* t = utf8;
 
    length = 0;
    while (utf8 - t < len){
        //one byte.ASCII as a, b, c, 1, 2, 3 ect
        if ( *(unsigned char *) utf8 <= 0x7f ) {
            //expand with 0s.
            *unicode++ = *utf8++;
        }
        //2 byte.
        else if ( *(unsigned char *) utf8 <= 0xdf ) {
            *unicode++ = ((*(unsigned char *) utf8 & 0x1f) << 6) + ((*(unsigned char *) (utf8 + 1)) & 0x3f);
            utf8 += 2;
        }
        //3 byte.Chinese may use 3 byte.
        else {
            *unicode++ = ((int) (*(unsigned char *) utf8 & 0x0f) << 12) +
   ((*(unsigned char *) (utf8 + 1) & 0x3f) << 6) +
   (*(unsigned char *) (utf8 + 2) & 0x3f);
            utf8 += 3;
        }
        length++;
    } 
    *unicode = 0;   
    return (length);
}

调用:

 char *pUnicode = new char[nUnlength];
 nUnlength= myUTF8_to_UNICODE((unsigned short int  *)pUnicode,(unsigned char *)strAuthor,nlength); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值