论坛里看到的两种方法:
不知道传进来的这个参数应该怎么设置,求解呀!谢谢各位大虾!要用这个判断一个文本文件的话,应该传什么参数进来呀,谢谢了!
/*!\class bool xxx::isUtf8(const char *str)
* \brief utf8编码编码判断函数
* \param 无
* \author qqqmal
* \version 无
* \exception 无
* \return 无
*/
bool xxx::isUtf8(const char *str)
{
    unsigned int len = strlen (str);
    unsigned int counter = 0;
    unsigned char head = 0x80;
    unsigned char tempStr;
    unsigned int gbNum = 0,utf8Num = 0;
    bool gb2 = FALSE;/*第二个字节是否为汉字 */
    
    for (int i=len-1; i>=0; i--) {
        tempStr = (unsigned char)str[ i];
        /*GB判断, gb范围:第一字节161~247,第二字节161~254 */
        if (!gb2 && (tempStr>161) && (tempStr<254)) {
              gb2 = TRUE;
        }
        else
        if (gb2 && (tempStr> 161) && (tempStr<247)) {
              gbNum++;
              gb2 = FALSE;         
        }
        else
        {
              gb2 = FALSE;     
        }
        
        /* utf8判断 */
        if ((tempStr&0xc0) == 0x80 ) {
              counter ++;
              head = head>>1;
              head |= 0x80;
        }
        else
        if (counter > 0) {
              if ((((head>>1)|0x80)&tempStr) == head) {
                  utf8Num++;
                  head = 0x80;
                  counter = 0;
            }
        } else {
              head = 0x80;
              counter = 0;
        }
    }
    if (gbNum*2 <= utf8Num*3) {
        return TRUE;
    } else {
        return FALSE;
    }
}
使用方法举例:
    if (isUtf8(text)) {         
        label->setText(QObject::trUtf8 (text));
    } else {
        label->setText(QObject::tr (text));
    }
    }
//try this one. it will yield more accurate result.
const bool BTStringMgr::isUtf8(const char *buf) {
int i, n;
register unsigned char c;
bool gotone = false;
#define F 0   /* character never appears in text */
#define T 1   /* character appears in plain ASCII text */
#define I 2   /* character appears in ISO-8859 text */
#define X 3   /* character appears in non-ISO extended ASCII (Mac, IBM PC) */
static const unsigned char text_chars[256] = {
    /*             BEL BS HT LF   FF CR   */
    F, F, F, F, F, F, F, T, T, T, T, F, T, T, F, F, /* 0x0X */
    /*                     ESC       */
    F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */
    T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */
    T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */
    T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */
    T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */
    T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */
    T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */
    /*         NEL                   */
    X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */
    X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */
    I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */
    I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */
    I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */
    I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */
    I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */
    I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I   /* 0xfX */
};
/* *ulen = 0; */
for (i = 0; (c = buf[i ]); i++) {
  if ((c & 0x80) == 0) {     /* 0xxxxxxx is plain ASCII */
    /*
    * Even if the whole file is valid UTF-8 sequences,
    * still reject it if it uses weird control characters.
    */
    if (text_chars[c] != T)
    return false;
  } else if ((c & 0x40) == 0) { /* 10xxxxxx never 1st byte */
    return false;
  } else {                   /* 11xxxxxx begins UTF-8 */
    int following;
  if ((c & 0x20) == 0) {         /* 110xxxxx */
    following = 1;
  } else if ((c & 0x10) == 0) {     /* 1110xxxx */
    following = 2;
  } else if ((c & 0x08) == 0) {     /* 11110xxx */
    following = 3;
  } else if ((c & 0x04) == 0) {     /* 111110xx */
    following = 4;
  } else if ((c & 0x02) == 0) {     /* 1111110x */
    following = 5;
  } else
    return false;
    for (n = 0; n < following; n++) {
    i++;
    if (!(c = buf[i ]))
      goto done;
    if ((c & 0x80) == 0 || (c & 0x40))
      return false;
    }
    gotone = true;
  }
}
done:
return gotone;   /* don't claim it's UTF-8 if it's all 7-bit */
}
#undef F
#undef T
#undef I
#undef X