根据楼上叙述的utf-8的特征,可以这样鉴定一段unsigned char*是不是utf-8编码(瞎写的,不知道能不能编译)
程序代码:
楼上有玩python的,其实在python里头这事更简单(因为轮子多)
程序代码:
程序代码:unsigned char heading_ones(unsigned char n) {
unsigned char i = 0;
while ((n << i) & 0b10000000) i++;
return i
}
bool isutf8(unsigned char* data, size_t len){ // len是整个unsigned char*的长度(读取的byte数),不是字符数
size_t i = 0; unsigned char offset;
while (i < len) {
offset = heading_ones(data[i]);
if (offset) {
// 以n个1开头,占n个byte
for (size_t j = i + 1; j < i + offset; j++) {
// 如果在这个字符的范围内有一个字节开头不是10,那就不是utf-8
if (data[j] & 0b11000000 != 0b10000000) return false;
}
i += offset;
} else {
// 以0开头,占一个byte
i++;
}
}
return true; // 有可能这段数据的编码不是utf-8,但至少它符合这个编码的标准
}楼上有玩python的,其实在python里头这事更简单(因为轮子多)
程序代码:with open(r'文件路径', 'rb') as fp:
fbytes = fp.read()
try:
_ = fbytes.decode()
print('是utf-8编码')
except UnicodeDecodeError:
print('不是utf-8编码')[此贴子已经被作者于2022-11-7 20:10编辑过]






