linux c言語は文字列がutf 8であるかどうかを判断する

1735 ワード

プロジェクト開発はこの機能を使って、メモしてもみんなに共有して、あなたは自分のシステムの中でブールのタイプのマクロを定義して、直接コードに行きましょう
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;
}