Nic*_*ick 15 python email invalid-characters character-encoding
我正在用Python编写一些邮件处理软件,它在头字段中遇到奇怪的字节.我怀疑这只是畸形邮件; 消息本身声称是us-ascii,所以我不认为有一个真正的编码,但我想得到一个unicode字符串近似原始的字符串而不抛出一个UnicodeDecodeError
.
所以,我正在寻找一个功能,它需要一个str
可选的一些提示,并且最好给我一个回复unicode
.我当然可以写一个,但是如果存在这样一个函数,那么作者可能已经想到了更好的方法来解决这个问题.
我也知道Python的设计更喜欢显式到隐式,并且标准库旨在避免解码文本中的隐含魔法.我只想明确说"继续猜测".
jfs*_*jfs 24
它不在标准库中,但您可以使用以下命令轻松安装它:
$ pip install chardet
Run Code Online (Sandbox Code Playgroud)
示例:
>>> import chardet
>>> import urllib
>>> detect = lambda url: chardet.detect(urllib.urlopen(url).read())
>>> detect('http://stackoverflow.com')
{'confidence': 0.85663169917190185, 'encoding': 'ISO-8859-2'}
>>> detect('https://stackoverflow.com/questions/269060/is-there-a-python-lib')
{'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ick 14
据我所知,标准库没有函数,尽管如上所述编写一个函数并不困难.我认为我正在寻找的真正的东西是一种解码字符串的方法,并保证它不会抛出异常.string.decode的errors参数就是这样.
def decode(s, encodings=('ascii', 'utf8', 'latin1')):
for encoding in encodings:
try:
return s.decode(encoding)
except UnicodeDecodeError:
pass
return s.decode('ascii', 'ignore')
Run Code Online (Sandbox Code Playgroud)