Python2與Python3字元相容問題的解決方案
Python2和Python3的字元相容問題是非常明顯的
原因:
Python3預設編輯字元:UTF-8
Python2預設編譯字元:ASCII
下面列舉出三種錯誤型別:
第一種:SyntaxError: Non-ASCII character '\xe7' in file:報錯檔案路徑
問題描述:
對於一個包含中文字元的Python檔案,比如在註釋裡包含中文字元,或者變數的值包含中文字元
Python3環境中,Python檔案裡面包含中文字元,不報錯,因為預設編譯字元是UTF-8
Python2環境中,Python檔案裡面包含中文字元,報錯,錯誤資訊:SyntaxError: Non-ASCII character '\xe7' in file:報錯檔案路徑
例項及解決方案:
問題例項:Python2環境,中文報錯
解決方法:在檔案首行新增:# -*- coding: utf-8 -*-
第二種:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
例項及解決方案:
問題例項:Python2環境,出現報錯
檢視一下它的預設編碼,是ASCII碼
解決方法:匯入sys包,設定預設編碼為UTF-8,編譯通過(設定完成後,我們可以輸出它的預設編碼看一下)
第三種:使用open函式時指定編碼格式
這裡只要稍稍注意一下就可以
在Python3環境中,匯入相應的包,直接使用open(file,mode='rb', encoding='utf-8')
file:是檔案路徑,絕對路徑和相對路徑都OK
mode:是開啟的方式,r:讀,w:寫,b:二進位制
encoding:開啟檔案的編碼方式
在Python2環境中,匯入相應的包,需要使用io.open(file,mode='rb', encoding='utf-8'),Python2也有open函式,但是沒有不能攜帶encoding這個引數
下面我們分別看一下它們方法的定義:
python2 的io.open:
python2 的open:
python3 的open: