2012-02-25 25 views
4

当我打开url并阅读它时,我无法识别它。但是当我检查内容头时,它说它被编码为utf-8。所以我试图将其转换为unicode,它抱怨UnicodeDecodeError:'ascii'编解码器无法解码位置1中的字节0x8b:序号不在范围(128)中使用unicode()。
提供错误字符集的urllib2 opener

.encode( “UTF-8”)产生 UnicodeDecodeError错误: 'ASCII' 编解码器不能在位置1解码字节0x8b:在范围序数不(128)

.decode(“UTF- 8“)生成 UnicodeDecodeError:'utf8'编解码器无法解码位置1中的字节0x8b:无效的起始字节。

我已经试过各种我能想出(我不擅于编码)

我会很高兴,如果我能得到这个工作。谢谢。

+0

HTTP头可能是错的 - 寻找在HTML本身指定HTML元标记。它可能是Latin-1('.decode('latin-1')')。 – 2012-02-25 16:17:06

+0

试过了。我很确定它是utf-8,因为当我访问该网站时,chrome sais是这样。 – thabubble 2012-02-25 16:45:30

+2

如果你的流真的是utf8编码的话,'.decode(“utf-8”)'会起作用。所以,你必须误解某件事。你能发布给你带来麻烦的URL(或:URL)吗? – alexis 2012-02-25 17:32:21

回答

5

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

你应该先解压:

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() 
+0

我想通了,但我会接受这个答案,所以别人不会犯我的错误:) – thabubble 2012-11-24 19:00:07

0

标题可能是错的。退房chardet

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

+0

它没有找到任何编码:( – thabubble 2012-02-25 16:45:52

+1

假设浏览器正确渲染它,它可能会告诉你的编码。是否有可能数据gzip'ed我也打过这个 – Ben 2012-02-25 16:48:55

+0

我不这么认为。我可以尝试解压缩它 – thabubble 2012-02-25 16:58:54