linux c语言判断字符串是否是utf8

来源:互联网 发布:淘宝店铺的微淘在哪里 编辑:程序博客网 时间:2024/06/05 02:33

项目开发用到这个功能,记下来也分享给大家,你根据自己系统中定义一下布尔类型宏即可,直接上代码吧

nopoll_bool ras_is_text_utf8(const char* str,long length){    int i;    //UFT8可用1-6个字节编码,ASCII用一个字节    int nBytes=0;    unsigned char chr;    //如果全部都是ASCII, 说明不是UTF-8    nopoll_bool bAllAscii=nopoll_true;     for(i=0;i<length;i++)    {        chr= *(str+i);        // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx        if( (chr&0x80) != 0 )         {            bAllAscii= nopoll_false;        }        //如果不是ASCII码,应该是多字节符,计算字节数        if(nBytes==0)         {            if(chr>=0x80)            {                if(chr>=0xFC&&chr<=0xFD)                {                    nBytes=6;                }                else if(chr>=0xF8)                {                    nBytes=5;                }                else if(chr>=0xF0)                {                    nBytes=4;                }                else if(chr>=0xE0)                {                    nBytes=3;                }                else if(chr>=0xC0)                {                    nBytes=2;                }                else                {                    return nopoll_false;                }                nBytes--;            }        }        //多字节符的非首字节,应为 10xxxxxx        else         {            if( (chr&0xC0) != 0x80 )            {                return nopoll_false;            }            nBytes--;        }    }    //违返规则    if( nBytes > 0 )     {        return nopoll_false;    }    //如果全部都是ASCII, 也是字符串    if( bAllAscii )     {        return nopoll_true;    }    return nopoll_true;}


0 0
原创粉丝点击