2016-11-04 6 views
-1

私はサーバーからデータを取得するためにPythonリクエストモジュールを使用したいが、私がheaders={'content-type':'application/json;charset=utf-8'}を設定したとしても、常にバイトデータを取得する。なぜPythonリクエストモジュールを使用すると、私はいつもサーバからバイトデータを取得できますか?

マイコード:私は、ヘッダーを印刷するとき

import requests 
from io import BytesIO 
headers={'content-type':'application/json;charset=utf-8'} 
#response=requests.get("https://api-dev.creams.io/buildings/2/contract-  templates",headers=headers) 
r = requests.get('https://developer.github.com/v3/timeline.json',headers=headers) 
print(r.headers) 
# response = urlopen("https://beta.creams.io/") 

content-typeはまだtext/html;charset-utf-8 なると私は常にバイトのデータを取得します。 r.textを使用すると、エラー:UnicodeEncodeError: 'ascii' codec can't encode character '\u2022' in position 382: ordinal not in range(128)が表示されます。そして、私はr.contentメソッドを使用して、私はいつもバイトデータ(b'で始まる)を取得します。私はutf-8エンコーディング文字列を取得したいだけです。どうすれば解決できますか?

+0

あなたは、復号データから 'UnicodeEncodeError'を得ることができません。あなたの問題は* encoding *です。 *完全なトレースバック*(あなたのポストにそれを含めます)を注意深く見てください。例外をスローする実際の行を指します。私はそれが 'print()'呼び出し、またはあなたのデータをバイトを必要とするものに書き出す何か他のものだと考えています(端末やコンソールにはバイトが必要なので、Pythonはあなたのためにエンコードします)。 –

+1

また、*あなたがutf-8でエンコードされた文字列*を取得したいと考えると、バイトについてしか話すことができません。 UTF-8はエンコーディングであり、Unicodeテキストはその標準に従ったバイト単位で表されます。 Unicodeテキストはエンコードされていませんが、UTFのようなものではありません。 –

+0

あなたは正しいと思います。 'r.text'を' print() 'メソッドで使っていないときだけです。エラーはありません。しかし、私はサーバーからの応答を見ることができません。 –

答えて

-1

これはうまく動作するはずです:

import requests as req 
r = req.get('https://developer.github.com/v3/timeline.json') 
print(r.text) 
+0

まだ同じエラー.'Traceback(最新の呼び出しの最後): 'ASCII' コーデック: プリント(r.text) UnicodeEncodeErrorを中 ファイル "/Users/zhangpenghao/Documents/python/test.py"、9行目、文字「\ u2022」を位置382でエンコードすることはできません:序数は範囲内にありません(128) ' –

関連する問題