千山万水人海中666 2018-01-25 13:27 采纳率: 100%
浏览 4704
已采纳

linux下utf8编码转Unicode编码

在网上找了转换的api只能转出一个汉字,怎么转整个字符串,以下是代码,希望各位大神指点一下

int Utf8ToUnicode(char* pInput, char* pOutput)

{

int outputSize = 0; //记录转换后的Unicode字符串的字节数

while (*pInput)  
{  
    if (*pInput > 0x00 && *pInput <= 0x7F) //处理单字节UTF8字符(英文字母、数字)  
    {  
        *pOutput = *pInput;  
         pOutput++;  
        *pOutput = 0; //小端法表示,在高地址填补0  
    }  
    else if (((*pInput) & 0xE0) == 0xC0) //处理双字节UTF8字符  
    {  
        char high = *pInput;  
        pInput++;  
        char low = *pInput;  
        if ((low & 0xC0) != 0x80)  //检查是否为合法的UTF8字符表示  
        {  
            return -1; //如果不是则报错  
        }  

        *pOutput = (high << 6) + (low & 0x3F);  
        pOutput++;  
        *pOutput = (high >> 2) & 0x07;  
    }  
    else if (((*pInput) & 0xF0) == 0xE0) //处理三字节UTF8字符  
    {  
        char high = *pInput;  
        pInput++;  
        char middle = *pInput;  
        pInput++;  
        char low = *pInput;  
        if (((middle & 0xC0) != 0x80) || ((low & 0xC0) != 0x80))  
        {  
            return -1;  
        }  
        *pOutput = (middle << 6) + (low & 0x3F);//取出middle的低两位与low的低6位,组合成unicode字符的低8位  
        pOutput++;  
        *pOutput = (high << 4) + ((middle >> 2) & 0x0F); //取出high的低四位与middle的中间四位,组合成unicode字符的高8位  
    }  
    else //对于其他字节数的UTF8字符不进行处理  
    {  
        return -1;  
    }  
    pInput ++;//处理下一个utf8字符  
    pOutput ++;  
    outputSize += 2;  
}  
//unicode字符串后面,有两个\0  
*pOutput = 0;  
 pOutput++;  
*pOutput = 0;  
return outputSize;  

}

  • 写回答

3条回答

  • threenewbee 2018-01-25 13:47
    关注

    大概看了下这个代码,思路没有错。如果代码来源可靠,那么很可能是你调用的问题,比如你用的printf strcpy之类的函数,截断了unicode string的\0,其实转换本身是成功的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题