解決UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:

       字符串在Python內部的表示是unicode編碼,所以,在作編碼轉換時,一般須要以unicode做爲中間編碼,即先將其餘編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另外一種編碼。
       
       Decode的做用是將其餘編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。

       Encode的做用是將unicode編碼轉換成其餘編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。

       所以,轉碼的時候必定要先搞明白,字符串str是什麼編碼,而後decode成unicode,而後再encode成其餘編碼

       代碼中字符串的默認編碼與代碼文件自己的編碼一致。

       python在安裝時,默認的編碼是ascii,當程序中出現非ascii編碼時,python的處理經常會報這樣的錯UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python沒辦法處理非ascii編碼的,此時須要本身設置將python的默認編碼,通常設置爲utf8的編碼格式。

      解決方法有三中:

      1.在命令行修改,僅本會話有效:
         1)經過>>>sys.getdefaultencoding()查看當前編碼(若報錯,先執行>>>import sys >>>reload(sys));
         2)經過>>>sys.setdefaultencoding('utf8')設置編碼

      2.較繁瑣,最有效
         1)在程序文件中如下三句
              import sys
              reload(sys)
              sys.setdefaultencoding('utf8')
      
      3.修改Python本環境(推薦)
         在Python的Lib\site-packages文件夾下新建一個sitecustomize.py文件,內容爲:
             #coding=utf8
             import sys
             reload(sys)
             sys.setdefaultencoding('utf8')

        重啓Python解釋器,發現編碼已被設置爲utf8,與方案二同效;這是由於系統在Python啓動的時候,自行調用該文件,設置系統的默認編碼,而不須要每次都手動加上解決代碼,屬於一勞永逸的解決方法。html

        值得說明的是,對於str和unicode之間的轉換:python

        str--->unicode: str.decode(編碼格式)網絡

        unicode-->str: unicode.encode(編碼格式)

----以上內容均摘自網絡,若有侵權,告知修改。
引用地址:
1.UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal - bjkandy http://www.tuicool.com/articles/qiqi2i
2.UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) http://www.cnblogs.com/bluescorpio/p/3594359.htmlui

相關文章
相關標籤/搜索