(內容屬于摘錄)
一、文件頭部聲明編碼
1、格式
符合正則表達式 "coding[; =]\s([- \w+])"的字符串都滿足
2、作用
對Python文件編碼類型的聲明,若沒有此編碼,則Python默認以ascii編碼去處理(如果沒有聲明編碼,而文件中又有非ascii類型的字符,則Python解釋器會報錯)
二、defaultencoding
1、設置代碼
import sys
reload(sys)
sys.setdefaultencoding() ?設置/ ?sys.getdefaultencoding() ?獲取
2、說明
如果不設置defaultencoding,那么Python在編碼解碼的時候就會使用默認的defaultencoding(Python2.x中默認為ascii,Python3.x中默認為unicode)
str.encode("utf-8") 等價于 str.decode(defaultencoding).encode("utf-8")
如果str的編碼是ascii,則不會報錯,但是含有非ascii字符的str,Python的解釋器會報錯
u=unicode("人生苦短") 等價于 u=unicode("人生苦短",defaultencoding)
三、decode與encode
如果代碼里面混合使用了 str 類型和 unicode 類型的字符串,Python 會默認使用 ascii 編碼嘗試對 unicode 類型的字符串編碼 (encode),或對 str 類型的字符串解碼 (decode),這時就很可能出現上述錯誤。
1、在進行同時包含 str 類型和 unicode 類型的字符串操作時,Python2 一律都把 str 解碼(decode)成 unicode 再運算,這時就很容易出現 UnicodeDecodeError。
2、如果函數或類等對象接收的是 str 類型的字符串,但你傳的是 unicode,Python2 會默認使用 ascii 將其編碼成 str 類型再運算,這時就很容易出現 UnicodeEncodeError。
四、獲取某一變量的編碼類型:
import chardet
chardet.detect(Variable_name)