我正在用Python编写一些邮件处理软件,它在头字段中遇到奇怪的字节.我怀疑这只是畸形邮件; 消息本身声称是us-ascii,所以我不认为有一个真正的编码,但我想得到一个unicode字符串近似原始的字符串而不抛出一个UnicodeDecodeError
.
所以,我正在寻找一个功能,它需要一个str
可选的一些提示,并且最好给我一个回复unicode
.我当然可以写一个,但是如果存在这样一个函数,那么作者可能已经想到了更好的方法来解决这个问题.
我也知道Python的设计更喜欢显式到隐式,并且标准库旨在避免解码文本中的隐含魔法.我只想明确说"继续猜测".
chardet模块的+1 (建议@insin
).
它不在标准库中,但您可以使用以下命令轻松安装它:
$ pip install chardet
示例:
>>> 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('/sf/ask/17360801/') {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
如果没有Pip,请参阅安装Pip.
您可能对Universal Encoding Detector感兴趣.
据我所知,标准库没有函数,尽管如上所述编写一个函数并不困难.我认为我正在寻找的真正的东西是一种解码字符串的方法,并保证它不会抛出异常.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')