根据楼上叙述的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编辑过]