标题:求助: 编码-如何区分 [ANSI] 和 [无BOM的UTF8] 这两种编码
只看楼主
TsXor
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:10
注 册:2022-11-7
得分:0 
根据楼上叙述的utf-8的特征,可以这样鉴定一段unsigned char*是不是utf-8编码(瞎写的,不知道能不能编译)
程序代码:
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编辑过]

2022-11-07 20:07
TsXor
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:10
注 册:2022-11-7
得分:0 
或者就像楼上贴的知乎回答链接里说的一样,uchardet解君愁:
https://
2022-11-07 20:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509995-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055995 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved