python 中的requests庫,進行請求,發現一直使用的 r.text ,返回的內容,看不懂。如下圖所示:
經查閱資料,發現 requests庫 ,r.text返回的是decode處理后的Unicode型的數據,r.content 返回的是bytes 二進制的原始數據。如果headers 沒有charset字符集指定的編碼方式,r.text 會調用chardet 來計算字符集。
查看response的headers,如下:
而標准的response響應,是返回如下:
HTTP權威指南中,顯示
如果HTTP響應中Content-Type字段沒有指定charset,則默認頁面是'ISO-8859-1'編碼。
這種處理英文沒問題,一遇到中文,就會出現亂碼。
解決:
1.清楚 該站的字符集編碼,可以使用r.encoding='xxx'模式,然后再r.text()會根據設定的字符集進行轉換后輸出。
返回中文應該可以正常查看。代碼如下:
r.encoding='utf-8'
print(r.text),
2. fiddler抓包,顯示response已經 encoded了,讓decode
請求后的響應response,先獲取bytes 二進制類型數據,再指定encoding,即可。
如:
bytes=r.content
print(bytes.decode(encoding="utf-8"))
3.使用apparent_encoding可獲取程序真實編碼
r.encoding = r.apparent_encoding
print(r.text)
也可以正常查看response中的 中文。
此文,記錄一下自己學習過程中遇到的坑。 詳細更多資料,可查看下面 兩篇文章,看后清楚很多。