当前位置:  开发笔记 > 编程语言 > 正文

是否有Python库函数试图猜测某些字节的字符编码?

如何解决《是否有Python库函数试图猜测某些字节的字符编码?》经验,为你挑选了3个好方法。

我正在用Python编写一些邮件处理软件,它在头字段中遇到奇怪的字节.我怀疑这只是畸形邮件; 消息本身声称是us-ascii,所以我不认为有一个真正的编码,但我想得到一个unicode字符串近似原始的字符串而不抛出一个UnicodeDecodeError.

所以,我正在寻找一个功能,它需要一个str可选的一些提示,并且最好给我一个回复unicode.我当然可以写一个,但是如果存在这样一个函数,那么作者可能已经想到了更好的方法来解决这个问题.

我也知道Python的设计更喜欢显式到隐式,并且标准库旨在避免解码文本中的隐含魔法.我只想明确说"继续猜测".



1> jfs..:

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.



2> Jonny Buchan..:

您可能对Universal Encoding Detector感兴趣.



3> Nick..:

据我所知,标准库没有函数,尽管如上所述编写一个函数并不困难.我认为我正在寻找的真正的东西是一种解码字符串的方法,并保证它不会抛出异常.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')

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有