2020-12-04

//转换成功,测返回0
BOOL     UTF8toAnsi(const char* utf8Str,unsigned short length)
{
      unsigned short i;
     char    *unicodeStr;
     unicodeStr = (char *)utf8Str;
    WCHAR chr=0;

    for (i=0;i<length;)
    {
        if ((0x80&utf8Str[i])==0) // ASCII
        {
            chr=utf8Str[i];
            i++;
        }
        else if((0xE0&utf8Str[i])==0xC0) // 110xxxxx 10xxxxxx
        {
            chr =(utf8Str[i+0]&0x3F)<<6;
            chr|=(utf8Str[i+1]&0x3F);
            chr = ff_uni2oem(chr,0);
            i+=2;
        }
        else if((0xF0&utf8Str[i])==0xE0) // 1110xxxx 10xxxxxx 10xxxxxx
        {
            chr =(utf8Str[i+0]&0x1F)<<12;
            chr|=(utf8Str[i+1]&0x3F)<<6;
            chr|=(utf8Str[i+2]&0x3F);
            chr = ff_uni2oem(chr,0);
            i+=3;
        }
        else // 不是UTF-8字符串
        {
            break;
        }
                if(chr&0xff00){
                        *unicodeStr++=(chr>>8);                    
                }                    
        *unicodeStr++=(char)chr;
        
    }
        
    return (i==length)?0:1;
}
char  CheckType(const char* cue_buf)
{
        unsigned short p;
        p = *(unsigned short *)cue_buf;
        if(p == 0xfeff){
                return    TYPE_UNICODE;
        }else if(p == 0xfffe){
                return    TYPE_UNICODE_BIG;
        }else if(p == 0xbbef){
                return    TYPE_UTF_8_BOM;
        }else{
                return    TYPE_ANSI;
        }
}

BOOL CheckUTF8(const char* AnsiStr,unsigned int length)
{
    unsigned int i=0;
    BOOL isUTF8=TRUE;
    while (i<length)
    {
        if ((0x80&AnsiStr[i])==0) // ASCII
        {
            i++;
            continue;
        }
        else if((0xE0&AnsiStr[i])==0xC0) // 110xxxxx
        {
            if (AnsiStr[i+1]=='\0')
            {
                isUTF8=FALSE;
                break;
            }
            if ((0xC0&AnsiStr[i+1])==0x80) // 10xxxxxx
            {
                i+=2;
                continue;
            }
            else
            {
                isUTF8=FALSE;
                break;
            }
        }
        else if((0xF0&AnsiStr[i])==0xE0) // 1110xxxx
        {
            if (AnsiStr[i+1]=='\0')
            {
                isUTF8=FALSE;
                break;
            }
            if (AnsiStr[i+2]=='\0')
            {
                isUTF8=FALSE;
                break;
            }
            if (((0xC0&AnsiStr[i+1])==0x80)&&((0xC0&AnsiStr[i+2])==0x80)) // 10xxxxxx 10xxxxxx
            {
                i+=3;
                continue;
            }
            else
            {
                isUTF8=FALSE;
                break;
            }
        }
        else // 不是UTF-8字符串
        {
            isUTF8=FALSE;
            break;
        }
    }
    return isUTF8;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值