根据UTF8编码,最多可由6个字节组成,所以UTF8是1-6字节编码组成
BOOL IsTextUTF8(char* str,ULONGLONG length) { DWORD nBytes=0;//UFT8可用1-6个字节编码,ASCII用一个字节 UCHAR chr; BOOL bAllAscii=TRUE; //如果全部都是ASCII, 说明不是UTF-8 for(int i=0; i<length; ++i) { chr= *(str+i); if( (chr&0x80) != 0 ) // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx bAllAscii= FALSE; if(nBytes==0) //如果不是ASCII码,应该是多字节符,计算字节数 { 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 FALSE; nBytes--; } } else //多字节符的非首字节,应为 10xxxxxx { if( (chr&0xC0) != 0x80 ) return FALSE; nBytes--; } } if( nBytes > 0 ) //违返规则 return FALSE; if( bAllAscii ) //如果全部都是ASCII, 说明不是UTF-8 return FALSE; return TRUE; }