post從網頁中獲取資料,由於編碼問題,出現亂碼。
方法:response = session.get('http://***x')
print(response.encoding)
response.encoding = 'utf-8'
print(response.json())
原因:1.因為資料來源的編碼宣告不規範,導致 reuqests 無法判斷出返回資料的正確編碼,從而使用了它的預設編碼 iso8859-1 來將資料轉換為 unicode,沒使用正確的編碼 utf-8,於是就出現亂碼了。
解決辦法一就是手動設定返回資料的正確編碼:response.encoding = 'utf-8'。這樣結果就是正確的 unicode 型別字串。
或者將錯誤的 unicode 用同樣的 iso8859-1 編碼轉換回去原本的 utf-8 編碼的 str 型別字串:data.encode('iso8859-1')。
2.(沒明白,反正就這麼個意思吧。編碼真是個大坑!)python中實際上有兩種字串,分別是str型別和unicode型別,這兩者都是basestring的派生類。str實際上相當於string, 而unicode則是標準的字串,相當於wstring。
其中i/o讀入的基本都是str型別,也就是說python不關心這些位元組代表什麼含義。但是如果需要做真正的字串操作的時候,建議使用unicode型別,這樣確保不存在編碼問題。
json理論上應該可用ascii完全表示,其中的寬字元用類似\u1111的形式表達。但是現在有很多不規範的json出現,例如s=""""""。此時就需要你自己確定這部分內容用位元組表達時,究竟用了什麼編碼,如果是utf-8,那麼就首先s_u = s.decode("utf-8")變成unicode字串。
另一方面,只要保證這段字串的編碼和python執行時環境的編碼保持一致,也是可以直接loads(str型別變數)的。例如linux下如果lang是utf-8,那麼python屁顛屁顛跑著的時候就可以直接把utf-8編碼的json串塞進去。
python request鍵值判斷
if request.request.has key 鍵值 httprequest物件的屬性 參考 表 h 1.httprequest物件的屬性 屬性 描述path 表示提交請求頁面完整位址的字串,不包括網域名稱,如 music bands the beatles method 表示提交請求使用的h...
python request模組學習
python request模組學習 安裝 使用 1 get 2 post 3 put 4 delete 5 head 6 options 為url傳遞引數 payload res requests.get params payload res.url u key2 value2 key1 valu...
python request模組學習
安裝 使用 1 get 2 post 3 put 4 delete 5 head 6 options payload res requests.get params payload res.url u key2 value2 key1 value 檢視響應內容 res requests.get re...