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')解碼,就沒有亂碼啦~
相關文章
- requests請求返回內容 中文亂碼問題
- Python Requests庫文件連結404問題解決及防止重複問題的建議Python
- python requests庫 響應中文亂碼Python
- Python爬蟲亂碼問題Python爬蟲
- Python BeautifulSoup中文亂碼問題Python
- javascript的物件問題及總結JavaScript物件
- 徹底搞懂 python 中文亂碼問題Python
- python查詢mysql中文亂碼問題PythonMySql
- Python列表最常見的問題【總結】Python
- confluence亂碼問題
- Java IO輸入輸出及亂碼問題Java
- python3-csv寫入中文亂碼問題Python
- python json.dumps中文亂碼問題解決PythonJSON
- Python 3.6.10 中的 requests 庫 TLS 1.2 強制使用問題及解決方案PythonTLS
- 回溯問題Python框架總結——排列組合問題Python框架
- vscode中文亂碼問題VSCode
- EasyUI 中文亂碼問題UI
- requests介面響應出現亂碼
- 解決 requests 庫 URL 編碼問題
- mysql亂碼的問題如何解決MySql
- idea控制檯中文亂碼的問題Idea
- 專案中遇到的RediS快取問題及面試問題總結Redis快取面試
- 解決中文亂碼問題
- Kali Linux 2020.1亂碼問題Linux
- jasperreport HTML格式亂碼問題HTML
- Tomcat配置jsp亂碼問題TomcatJS
- IDEA中Tomcat亂碼問題IdeaTomcat
- python爬蟲爬取網頁中文亂碼問題的解決Python爬蟲網頁
- 問題總結
- 【Atom】autocomplete-python外掛報亂碼異常問題Python
- 如何解決python 圖表中文顯示亂碼問題Python
- 初次使用EasyUI框架外掛遇到的問題及總結UI框架
- Oracle 錯誤總結及問題解決 ORAOracle
- 【總結】Python爬蟲面試題及答案(二)Python爬蟲面試題
- 如何解決PuTTY中文亂碼的問題
- flashfxp 亂碼,2種辦法解決flashfxp 亂碼問題
- Druid.io SQL亂碼問題UISQL
- confluence中文顯示亂碼問題
- springmvc 解決中文亂碼問題SpringMVC