PS:這個解決方法可能很簡單,但是這是平時的一些細節問題,所以有必要提醒一下!
首先代碼不多,就是通過get方法去獲取豆瓣首頁信息,如圖:但是會報UnicodeEncodeError: 'gbk' codec can't encode character '\u2122' in position 42358: illegal multibyte sequence錯誤
其中,r.encoding是獲取響應頭Content-Type的charset值,有的網站沒有charset字段,就可能使用默認的 ISO-8859-1, 一般那些不規範的頁面往往有這樣的問題.,所以這種方法可能獲取編碼不準確。
那麼r.apparent_encoding就是獲取網站真實的編碼,apparent_encoding通過調用chardet.detect()來識別文本編碼。
- 情況一:這可能是大家正常情況下最常遇到的問題,那就是沒有charset字段,或者編碼與charset字段的不符合。
解決方法:
- 如果沒有charset字段,可以通過r.apparent_encoding獲取真實的編碼,再使用r.encoding = ‘xxx’指定正確的編碼,這樣在調用text時就會根據指定的字符編碼進行轉換。
- 如果與charset的編碼不符合,直接用r.encoding = ‘xxx’指定charset的編碼就OK啦!
- 情況二: 通過r.encoding或者r.apparent_encoding獲取的編碼都是一樣的,但是還是會報編碼錯誤,這種情況可能就要考慮下IDE的字符編碼設置問題了。
以PyCharm爲例按如下路徑:file→settings→Editor→File Encodings→Project Encoding進行設置,如圖:
推薦看一下我以前的文章:Pycharm有必要改的幾個默認設置項
自學交流羣:747509472