chardet
检测到的编码可以毫无例外地用于解码字节数组,但输出字符串可能不正确。
该try ... except ...
方式非常适用于已知编码,但不适用于所有场景。
我们可以try ... except ...
先使用,然后chardet
作为 B 计划:
def decode(byte_array: bytearray, preferred_encodings: List[str] = None):
if preferred_encodings is None:
preferred_encodings = [
'utf8', # Works for most cases
'cp1252' # Other encodings may appear in your project
]
for encoding in preferred_encodings:
# Try preferred encodings first
try:
return byte_array.decode(encoding)
except UnicodeDecodeError:
pass
else:
# Use detected encoding
encoding = chardet.detect(byte_array)['encoding']
return byte_array.decode(encoding)