A. python3爆編碼錯誤
python3默認內碼是UTF-8,不能設置為其他默認格式,文件需要保存成UTF-8格式。
操作系統默認字元環境是GBK的話,就需要手動轉換,輸入需要str.encode('UTF-8')轉換,輸出需要str.encode('GBK')轉換。主要是操作系統的問題,如果操作系統是採用UTF-8編碼的,就沒有這個問題。
B. python在print的時候出現編碼錯誤
這個是由於ide(你的是pycharm?)的默認編碼沒對,修改為utf-8就可以了(自己找在哪改,不是代碼里改)
C. linux python運行報編碼錯誤
一次重啟伺服器後,supervisor接管的python腳本中的函數 open() 和 print() 都會報下面的編碼錯誤:
UnicodeEncodeError: 'ascii' codec can't encode
使用的是python3,按理說編碼都會默認utf-8,而且本地運行的python腳本並沒有這個問題。
經大佬指點,增加環境變數 export LC_ALL="en_US.UTF-8" 後,再重啟supervisor,問題解決
下面是復制的: https://www.cnblogs.com/badboy200800/p/11215981.html
Locale是一個軟體在運行時的語言環境,。是根據計算機用戶所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的。它包括語言(Language), 地域 (Territory) 和字元集(Codeset)。
一個locale的書寫格式為: 語言[ 地域[.字元集]]。完全的locale表達方式是 [語言[ 地域][.字元集] [@修正值]。例如:
zh_CN.GB2312 => 中文_中華人民共和國+國標2312字元集。
(1)locale把按照所涉及到的文化傳統的各個方面分成12個大類
(2)查看標准字元集列表
常用字元集:en_US.utf8、zh_CN.gb2312、zh_CN.gbk、zh_CN.utf8等
3.Locale的設定
LC_ALL和LANG優先順序的關系:LC_ALL > LC_* >LANG
(1)如果需要一個純中文的系統的話,設定LC_ALL= zh_CN.XXXX即可。或者設定LANG=zh_CN.XXXX也可以,但是LC_ 不要有任何特殊設定才可以(因為LC_ 優先順序高)。
(2)如果需要個性化的環境,例如只想要一個可以輸入中文的環境,而保持菜單、標題,系統信息等等為英文界面,那麼只需要設定LANG=en_US.XXXX,然後 LC_CTYPE=zh_CN.XXXX就可以了。
(3)假如什麼也不做的話,也就是LC_ALL,LANG和LC_*均不指定特定值的話,系統將採用POSIX作為lcoale,也就是C locale。
4.查看與設定字元集實踐
(1)查看當前系統字元集三種方式(LC_ALL、LC_CTYPE和LANG),以查看LANG為例:
(2)更改系統字元集
備註:直接執行上述命令,可以臨時修改系統字元集。如果寫入環境變數可以永久改變字元集。
(3)取消當前系統字元集(設定為空)
備註:直接執行上述命令,可以臨時修改系統字元集。如果寫入環境變數可以永久改變字元集。
D. python輸出到文件亂碼如何解決
python代碼文件的編碼
py文件默認是ASCII編碼,中文在顯示時會做一個ASCII到系統默認編碼的轉換,這時就會出錯:SyntaxError: Non-ASCII character。需要在代碼文件的第一行或第二行添加編碼指示:
1 # coding=utf-8 ##以utf-8編碼儲存中文字元
2 print '中文'
像上面那樣直接輸入的字元串是按照代碼文件的編碼來處理的,如果用unicode編碼,有以下三種方式:
1 s1 = u'中文' #u表示用unicode編碼方式儲存信息
2 s2 = unicode('中文','gbk')
unicode是一個內置函數,第二個參數指示源字元串的編碼格式。
decode是任何字元串具有的方法,將字元串轉換成unicode格式,參數指示源字元串的編碼格式。
encode也是任何字元串具有的方法,將字元串轉換成參數指定的格式。
(2)、字元串的編碼
用 u'漢字' 構造出來的是unicode類型,不用的話構造出來是str類型
str的編碼是與系統環境相關的,一般就是sys.getfilesystemencoding()得到的值
所以從unicode轉str,要用encode方法
從str轉unicode,所以要用decode
例如:
# coding=utf-8 #默認編碼格式為utf-8
s = u'中文' #unicode編碼的文字
print s.encode('utf-8') #轉換成utf-8格式輸出
但當python中間處理非ASCII編碼時,經常會出現如下錯誤:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的數字,python在默認的情況下認為語言的編碼是ascii編碼,所以無法處理其他編碼,需要設置python的默認編碼為所需要的編碼。
一個解決的方案是在代碼中添加:
import sys
reload(sys)
sys.setdefaultencoding('utf-8') (其中utf-8為你想輸出的字元編碼)
解釋:
sys.setdefaultencoding方法在python導入site.py後就刪除了(具體代碼查看site.py就可以看到)因此如果想用的話可以再重新load進入
總結:
u=u'unicode編碼文字'
g=u.encode('gbk') #轉換為gbk格式
print g #此時為亂碼,因為當前環境為utf-8,gbk編碼文字為亂碼
str=g.decode('gbk').encode('utf-8') #以gbk編碼格式讀取g(因為他就是gbk編碼的,需要事先知道它是GBK編碼)並轉換為utf-8格式輸出
print str #正常顯示中文(同文件輸出)
安全的方法:
s.decode('gbk','ignore').encode('utf-8′) #以gbk編碼讀取(當然是讀取gbk編碼格式的文字了)並忽略錯誤的編碼,轉換成utf-8編碼輸出。
推薦學習《Python教程》!
E. python2錯誤怎麼回事
代碼的問題。
python異常,表示運行時出現了錯誤,圖中的錯誤為:讀取文件時,已經遇到了文件結尾而無法讀取,這種情況需要程序編寫額外的代碼來處理。
代碼:
python2要用raw_input()而不是input()
python Traceback (most recent call last) 錯誤信息
Traceback (most recent call last):
File "XXX.py", line 13, in <mole>
f3('0')
File "XXX.py", line 12, in f3
return f2(s)+1
File "XXX.py", line 8, in f2
return f1(s)+1
File "XXX.py", line 4, in f1
return 1 / int(s)
ZeroDivisionError: division by zero
解讀錯誤信息就可以定位錯誤。
Traceback (most recent call last):
這是錯誤的跟蹤信息。
File "XXX.py", line 13, in <mole>
f3('0')
調用f3()出錯了,錯誤出現在文件XXX.py的第13行代碼,錯誤來源第9行:
File "XXX.py", line 12, in f3
return f2(s)+1
調用f2()出錯了,錯誤出現在文件XXX.py的第12行代碼,錯誤來源第8行:
File "XXX.py", line 8, in f2
return f1(s)+1
調用f1()出錯了,錯誤出現在文件XXX.py的第8行代碼,錯誤來源第4行:
File "XXX.py", line 4, in f1
return 1 / int(s)
return 1 / int(s)出錯了,找到了錯誤的源頭。
ZeroDivisionError: division by zero
這是錯誤類型。
F. python3讀文件編碼錯誤怎麼辦
在python3中系統默認編碼是unicode,讀取文件經常會編碼錯誤導致報錯。
首先先確認要讀取文件的編碼,可這樣操作:
記事本打開文本文件,點擊「文件」-「另存為」查看編碼:
importcodecs
f=codecs.open(r"test.txt","r","gbk")
print(f.read())
f.close()
(示例的文件是ANSI所以使用GBK讀取)
以上就可以正確讀取想要的文件了
G. python讀取文件遇到編碼錯誤
首先確定你的python版本是2 還是 3
然後把主要讀文件和顯示的代碼貼一下