python獲取網頁內容的相關編碼問題

當網頁編碼不規範沒法獲取正確編碼格式的時候可能會出現問題的一些解決方法:python

1.常規習慣性的添加mysql

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

2.頁面編碼不是UTF-8衝突的時候處理ajax

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 215: ordinal not in range(128)
# 第三方的模塊
import chardet
import requests

url = 'http://my.oschina.net/u/1188877/blog'
req = requests.get(url, timeout=5, verify=False, allow_redirects=True)
# detect()返回 --> {'confidence': 1.0, 'encoding': 'ascii'} --> 前面是準確率,後面是編碼格式
codes = charder.detect(url)[1]
page_content = req.content.decode(codes, 'ignore').encode('utf-8')

3.可能存在部分網站沒GZIP壓縮的狀況下,形成requests自動解壓處理的時候異常問題sql

ContentDecodingError: ('Received response with content-encoding: gzip, but failed to decode it.', error('Error -3 while decompressing: incorrect header check',))
import requests

req = requests.get(url, headers={'Accept-Encoding': ''})

4.單獨使用上面幾種處理方法的時候可能會出現單個比較特殊的錯誤,因此最好的處理方法是整合上面的全部方案數據庫

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# 第三方的模塊
import chardet
import requests

url = 'http://my.oschina.net/u/1188877/blog'
req = requests.get(url, headers={'Accept-Encoding': ''}, timeout=5, verify=False, allow_redirects=True)
codes = charder.detect(url)[1]
page_content = req.content.decode(codes, 'ignore').encode('utf-8')

5. django提交的POST數據寫入含中文編碼錯誤django

# 2016-01-18更新
# 網頁ajax post的數據爲ASCII編碼的,遇中文處理會報錯
# 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
# 最簡單的方法,代碼最開頭加上以下代碼
from __future__ import unicode_literal

6. ENDide

en,暫時就遇到了這些個問題,後續有相關問題再說。

7. 簡單數據庫MySQLdb中文亂碼小問題post

# 報錯以下
_mysql_exceptions.OperationalError: (2019, "Can't initialize character set utf-8 (path: /usr/share/mysql/charsets/)")
 # python
 conn = MySQLdb.connect(host, user, passwd, dbname, port, charset="utf-8")
 # 粗心問題,查看/usr/share/mysql/charsets/Index.xml文件會發現並無utf-8的編碼,只有utf8
 conn = MySQLdb.connect(host, user, passwd, dbname, port, charset="utf-8")
 # 數據庫設置成utf-8,python文件設置成utf-8,頁面文件設置成utf-8,over,通常不會亂碼
相關文章
相關標籤/搜索