有没有Python库函数可以猜测某些字节的字符编码?
我正在用Python写一些处理邮件的软件,但在邮件头字段中遇到了一些奇怪的字节。我怀疑这只是邮件格式不正确;邮件内容声称是用us-ascii编码的,所以我觉得并没有真正的编码。不过,我想得到一个接近原始内容的unicode字符串,而不想出现UnicodeDecodeError
的错误。
所以,我在寻找一个函数,它可以接受一个str
和一些可选的提示,然后尽力给我返回一个unicode
。当然,我可以自己写一个,但如果已经有这样的函数,作者可能已经考虑过更好的实现方式。
我也知道Python的设计更倾向于明确而不是隐含,而且标准库的设计是为了避免在解码文本时出现隐含的魔法。我只是想明确地说“可以试着猜一下”。
3 个回答
2
我发现最好的办法就是一个一个尝试用常见的编码方式来解码,放在一个“尝试-捕获”的结构里。
16
根据我的了解,标准库里没有现成的函数,不过按照上面的建议,自己写一个也不算太难。我真正想要的是一种解码字符串的方法,并且能确保不会出现错误。字符串的decode方法中的错误参数正好可以做到这一点。
def decode(s, encodings=('ascii', 'utf8', 'latin1')):
for encoding in encodings:
try:
return s.decode(encoding)
except UnicodeDecodeError:
pass
return s.decode('ascii', 'ignore')