python requests庫,請求返回 中文亂碼問題的解決


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中的 中文。

此文,記錄一下自己學習過程中遇到的坑。 詳細更多資料,可查看下面 兩篇文章,看后清楚很多。

 

查閱資料鏈接:

http://xiaorui.cc/archives/2786

https://www.cnblogs.com/bitpeng/p/4748872.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM