接上篇。
(1)判断是否utf8编码
SERVER_DECL bool _IsStringUTF8(const char* str)
{
int i;
unsigned char cOctets; // octets to go in this UTF-8 encoded character
unsigned char chr;
bool bAllAscii = TRUE;
long iLen = (long)strlen(str);
cOctets = 0;
for(i = 0; i < iLen; i++)
{
chr = (unsigned char)str[i];
if((chr & 0x80) != 0) bAllAscii = FALSE;
if(cOctets == 0)
{
if(chr >= 0x80)
{
do
{
chr <<= 1;
cOctets++;
}
while((chr & 0x80) != 0);
cOctets--;
if(cOctets == 0) return FALSE;
}
}
else
{
if((chr & 0xC0) != 0x80)
return FALSE;
cOctets--;
}
}
if(cOctets > 0)
return FALSE;
if(bAllAscii)
return FALSE;
return TRUE;
}