1. 程式人生 > >Python2與Python3字元相容問題的解決方案

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: