判断字符串是否UTF8编码
我现在需要判断一个字符串是否UTF8编码,在网上找到一个叫IsTextUTF8的函数,但是遇到一个问题,当字符串为"偶也"时就无法正确判断了,请教大家是否有其他的方法判断一个字符串是否UTF8编码?该函数如下:
BOOL IsUTF8String(char * str, ULONGLONG length)
{
int i = 0;
DWORD nBytes = 0; // UFT8可用1-6个字节编码,ASCII用一个字节
UCHAR chr = 0x0;
BOOL bAllAscii = TRUE; // 如果全部都是ASCII, 说明不是UTF-8
for(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;
}
[解决办法]
这个貌似没有100%准确的方法