2010-09-19 77 views
4

我正在使用python與stackoverflow API一起玩。我運行下面的命令:將python字節類型更改爲字符串

f = urllib.request.urlopen('http://api.stackoverflow.com/1.0/stats') 
d = f.read() 

類型d的是類的字節',如果我打印它,它看起來像:

b'\x1f\x8b\x08\x00\x00\x00 .... etc 

我試圖d=f.read().decode('utf-8')作爲在所述報頭中指示的字符集,但我得到一個 'utf8' codec can't decode byte 0x8b in position 1"錯誤消息

如何將我從我的urllib.request調用收到的字節對象轉換爲字符串?

回答

5

檢查以確保您的響應正文沒有被壓縮。相信它的傳輸編碼或響應頭文件,我非常有信心地處理壓縮數據而不是字符集編碼問題。

更新:意識到我有一個不解釋/提供足夠細節的壞習慣。對於Python gzip'd字節字符串,它們總是以1f8b開頭。有人在這裏更好地解釋它https://stackoverflow.com/a/3703300/9908

+1

你明白了。我用以下方法解決了這個問題: import zlib decompressed_data = zlib.decompress(f.read(),16 + zlib.MAX_WBITS) – amccormack 2010-09-19 19:07:27

相關問題