chardet
判断 stream:bytes 的时候,要短,但是不能太短
越短越不准,越长越慢
判断一个 15MB 的 txt 文件,需要耗时 5-20 秒
所以,我建议,取前 256 个字节来判断,可以平衡速度和准确率
def check_encoding(stream: bytes) -> str | None:
encoding = chardet.detect(stream[:256]).get('encoding', None)
return encoding
这样(指取前 256 字节)大概只需要 10-30 ms 就可以判断出文件编码