Python及requests亂碼問題的總結
今天在用requests抓取網頁的時候,發現有個頁面,
r = requests.get(url) s = r.texts一直都有亂碼
以前每次碰到亂碼問題,解決完了就過去了,今天想好好研究一下,免得以後再遇到又不知道怎麼辦了。下面是一些總結:
以下為找到的資料:
字串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
decode的作用是將其他編碼的字串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字串str1轉換成unicode編碼。
encode的作用是將unicode編碼轉換成其他編碼的字串,如str2.encode('gb2312'),表示將unicode編碼的字串str2轉換成gb2312編碼。
因此,轉碼的時候一定要先搞明白,字串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼
如果一個字串已經是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷,用非unicode編碼形式的str來encode會報錯
我看了一下待抓取的頁面,charset是gb2312
所以按照以上的說法,我先判斷了一下
isinstance(s, unicode)
顯示為True
既然如此,那我是否可以
結果直接報錯
s.encode('gb2312')
UnicodeEncodeError: 'gb2312' codec can't encode character u'\xbb' in position 317: illegal multibyte sequence
目前不知道是什麼原因,猜想是本來是gb2312,轉成unicode之後出現了gb2312不能解析的特殊字元?
既然如此,那我們就不要用unicode了
s = r.content
通過type(s)知道,s現在的型別是str,這樣再通過
s.decode('gb2312')解碼,就沒有亂碼啦~
相關文章
- python中文亂碼問題大總結Python
- 關於中文亂碼問題(總結)
- requests請求返回內容 中文亂碼問題
- Python Requests庫文件連結404問題解決及防止重複問題的建議Python
- python requests庫 響應中文亂碼Python
- Python中文亂碼問題Python
- Python BeautifulSoup中文亂碼問題Python
- Python爬蟲亂碼問題Python爬蟲
- javascript的物件問題及總結JavaScript物件
- plsql+html亂碼問題彙總SQLHTML
- 中文亂碼的總結薦
- python查詢mysql中文亂碼問題PythonMySql
- 徹底搞懂 python 中文亂碼問題Python
- python 中文亂碼問題解決方案Python
- python訪問oracle時的問題總結PythonOracle
- flex亂碼問題Flex
- mysql亂碼問題MySql
- Java IO輸入輸出及亂碼問題Java
- javaweb 中的亂碼問題JavaWeb
- Python列表最常見的問題【總結】Python
- python 生成csv亂碼問題解決方法Python
- eclipse 中文亂碼問題解決方案彙總Eclipse
- EasyUI 中文亂碼問題UI
- MSSQL中文亂碼問題SQL
- Java 中文 亂碼問題Java
- 解決 requests 庫 URL 編碼問題
- 回溯問題Python框架總結——排列組合問題Python框架
- python3-csv寫入中文亂碼問題Python
- 專案中遇到的RediS快取問題及面試問題總結Redis快取面試
- Python 3.6.10 中的 requests 庫 TLS 1.2 強制使用問題及解決方案PythonTLS
- MYSQL實戰-MHA搭建及問題總結MySql
- PHP問題總結:PHP最佳化及高效提速問題小結(轉)PHP
- 深度揭祕亂碼問題背後的原因及解決方式
- 問題總結
- mysql亂碼的問題如何解決MySql
- 解決 plsql 遇到亂碼的問題SQL
- oracle字元亂碼問題的解決Oracle字元
- 解決Flex裡的亂碼問題Flex