这个问题已经有一个答案在这里:

我写一些邮件处理软件的在蟒蛇,是遇到奇怪的字节的标题领域。我怀疑这仅仅是个错误格式的邮件;消息本身的权利要求是us-ascii,因此我不认为这是一个真正的编码,但我想走出一unicode串近似原有的一个没有扔 UnicodeDecodeError.

因此,我在寻找一个功能,需要一个 str 和任选的一些提示,并且其小家伙给我回一个 unicode.我可以写一个当然的,但如果这样的功能存在其提交人可能认为深一点的最佳方式去关于这一点。

我也知道,蟒蛇的设计更明确的,隐含和标准图书馆被设计,以避免隐含的魔法在解码文本。我只是想明确地说"继续前进和猜测".

有帮助吗?

解决方案 3

我可以告诉,该标准图书馆没有一个功能,虽然这不是太困难写入一个为上述建议。我想真实的东西,我一直在寻找的是一种方法来解串并保证它不会扔的一个例外。错误参数字符串。解码这样做的。

def decode(s, encodings=('ascii', 'utf8', 'latin1')):
    for encoding in encodings:
        try:
            return s.decode(encoding)
        except UnicodeDecodeError:
            pass
    return s.decode('ascii', 'ignore')

其他提示

+1 chardet 模块(建议通过 @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('https://stackoverflow.com/questions/269060/is-there-a-python-lib')
{'confidence': 0.98999999999999999, 'encoding': 'utf-8'}

看看 安装Pip 如果你没有一个。

你可能会感兴趣 普遍的编码器.

最好的方式做到这一点,我已经找到的是反复尝试解潜在的每一个最常用的内部编码的一个尝试除外块。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top