urllib2开启者提供错误的字符集

时间:2012-02-25 16:07:38

标签: python utf-8 character-encoding urllib2

当我打开网址并阅读它时,我无法识别它。但是,当我检查内容标题时,它表示它被编码为utf-8。因此我尝试将其转换为unicode并且它抱怨UnicodeDecodeError:'ascii'编解码器无法使用unicode()解码位置1中的字节0x8b:序号不在范围(128)中。

.encode(“utf-8”)产生 UnicodeDecodeError:'ascii'编解码器无法解码位置1中的字节0x8b:序数不在范围内(128)

.decode(“utf-8”)制作完成 UnicodeDecodeError:'utf8'编解码器无法解码位置1的字节0x8b:无效的起始字节。

我已经尝试了所有我能想到的东西(我在编码上并不擅长)

如果我能让这个工作,我会很高兴。感谢。

2 个答案:

答案 0 :(得分:7)

这是一个常见的错误。服务器发送gzip压缩流。

你应该首先解压缩它:

response = opener.open(self.__url, data)
if response.info().get('Content-Encoding') == 'gzip':
    buf = StringIO.StringIO( response.read())
    gzip_f = gzip.GzipFile(fileobj=buf)
    content = gzip_f.read()
else:
    content = response.read()

答案 1 :(得分:0)

标题可能有误。查看chardet

编辑:更多地考虑它 - 我的钱是关于内容被gzipped。我相信一些Python的各种URL开放模块/类/等将会ungzip,而其他人则不会。