전체 문자열을 검사하여 한 문자열이라도 utf8 코드가 들어 있는 경우 true를 리턴
bool IsUtf8(const char* str)
{
int str_bytes = 0;
if(str == NULL ) {
return false;
}
str_bytes = strlen(str);
bool isUtf8(true);
int index = 0;
while (index < str_bytes && isUtf8)
{
char achar = str[index];
int supplemental_bytes = 0;
if ((achar & 0x80) == 0) {
// 0xxxxxxx
++index;
}
else if ((achar & 0xF8) == 0xF0) {
// 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
++index;
supplemental_bytes = 3;
}
else if ((achar & 0xE0) == 0xE0) {
// 1110zzzz 10yyyyyy 10xxxxxx
++index;
supplemental_bytes = 2;
}
else if ((achar & 0xE0) == 0xC0) {
// 110yyyyy 10xxxxxx
++index;
supplemental_bytes = 1;
}
else {
isUtf8 = false;
}
while (isUtf8 && supplemental_bytes--)
{
if (index >= str_bytes) {
isUtf8 = false;
}
else if ((str[index++] & 0xC0) != 0x80) {
// 10uuzzzz
isUtf8 = false;
}
}
}
return isUtf8;
}