Python2.X 中的編碼問題

(內容屬于摘錄)

一、文件頭部聲明編碼

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


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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容