判断文本是否是utf-8格式 (用于区分GB2312和UTF-8)

来源:互联网 发布:全面战争哪代优化最好 编辑:程序博客网 时间:2024/05/21 06:56
bool IsTextUTF8(const char* str, long length) {  unsigned char chr;  int nBytes = 0; // UFT8可用1-6个字节编码,ASCII用一个字节  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 // every char of ascii buffer looks like 10xxxxxx, except the first char   {    if( (chr&0xC0) != 0x80 )    {     return false;    }    nBytes--;   }  }  if (nBytes > 0) // format error  {   return false;  }  if (bAllAscii) // if all chars are ascii, the buffer is not utf-8  {   return false;  }  return true; }


0 0
原创粉丝点击