写一个cpp函数, 支持验证是否是utf-8字符串, 你可以做到吗?
时间: 2023-06-08 13:04:59 浏览: 56
可以,以下是一个简单的实现:
```cpp
bool isUTF8(char* str) {
int i = 0;
while (str[i] != '\0') {
// 判断 Byte Order Mark (BOM)
if ((unsigned char)str[i] == 0xEF && (unsigned char)str[i+1] == 0xBB && (unsigned char)str[i+2] == 0xBF) {
i += 3;
continue;
}
int numBytes = 0;
unsigned char temp = (unsigned char)str[i];
if (temp <= 0x7F) {
// 单字节字符
i++;
continue;
} else if (temp >= 0xC2 && temp <= 0xDF) {
// 双字节字符
numBytes = 2;
} else if (temp >= 0xE0 && temp <= 0xEF) {
// 三字节字符
numBytes = 3;
} else if (temp >= 0xF0 && temp <= 0xF4) {
// 四字节字符
numBytes = 4;
} else {
// 不是 UTF-8 字符
return false;
}
for (int j = 1; j < numBytes; j++) {
if ((unsigned char)str[i+j] < 0x80 || (unsigned char)str[i+j] > 0xBF) {
// 第 j 个字节不是 10xxxxxx 的形式
return false;
}
}
i += numBytes;
}
return true;
}
```
此函数通过遍历字符串中的每个字符,判断其是否满足UTF-8编码,最终返回一个布尔值以表示字符串是否为UTF-8编码。