5


1

Pythonバイト型を文字列に変更します

私はPythonを使用してstackoverflow APIを操作しています。 次のコマンドを実行します。

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’コーデックは位置1のバイト0x8bをデコードできませんエラーメッセージ

urllib.request呼び出しから受け取ったバイトオブジェクトを文字列に変換するにはどうすればよいですか?

1 Answer


6


応答本文がgzip圧縮されていないことを確認してください。 転送ヘッダーなどの応答ヘッダーを信じているので、文字セットのエンコードの問題ではなく、圧縮データを扱うことに自信があります。

更新:十分な詳細を説明/提供しないという悪い習慣があることに気づきました。 Pythonのgzipされたバイト文字列の場合、常に1f8bで始まります。誰かがここでより適切に説明していますhttps://stackoverflow.com/a/3703300/9908