2012-02-25 82 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