2016-11-04 38 views
-1

我想使用python requests模塊從服務器獲取數據,但我總是獲取字節數據,即使我已經設置了headers={'content-type':'application/json;charset=utf-8'}爲什麼我總是在使用python requests模塊時從服務器獲取字節數據?

我的代碼:

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'。你的問題是*編碼*。仔細觀察*完整追蹤*(將其包含在您的文章中),並指向引發異常的實際行。我懷疑這是一個'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(最新最後調用): 文件 「/Users/zhangpenghao/Documents/python/test.py」,9號線,在 打印(r.text) UnicodeEncodeError: 'ASCII' 編解碼器無法在位置382中對字符'\ u2022'進行編碼:序號不在範圍(128)中 –

相關問題