我想使用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編碼的字符串。我該如何解決它?
不能從解碼數據得到一個'UnicodeEncodeError'。你的問題是*編碼*。仔細觀察*完整追蹤*(將其包含在您的文章中),並指向引發異常的實際行。我懷疑這是一個'print()'調用,或者其他將您的數據寫入需要字節的東西(例如,您的終端或控制檯需要字節,因此Python會爲您編碼)。 –
另外,當你談論*只是想獲得utf-8編碼的字符串*時,你只能談論字節。 UTF-8是一種編碼,其中Unicode文本以該標準之後的字節表示。 Unicode文本不是編碼的,它不是UTF-任何東西。 –
我認爲你是對的。當我只使用'r.text'時不使用'print()'方法。它沒有錯誤。但是我看不到服務器的響應。 –