本文執行個體講述了在windows命令視窗下執行Python檔案產生亂碼的問題, 供大家參考:
Ps: 如有錯誤還請指正, 歡迎交流學習
# -*- coding:utf-8 -*-str = "彥雪"print str
執行後, 輸出結果如下:
褰﹂洩
亂碼結果和大家可能不同, 不過也都是亂碼啦!!
問題分析
Python2 預設編碼為 "ascii", ascii編碼不包含中文字元
如果在其中有中文字元的話, Python解譯器一般會報錯.
但如果指定了以UTF-8 編碼, Python就不再報錯.
"# -- coding:utf-8 --" 是指定Python源碼以 UTF-8 編碼。
window預設編碼為gbk編碼,所以str輸出前必須編碼為gbk。
由於Python中不允許直接將將utf-8 轉為gbk, 因此需要先將utf-8 轉為unicode 再轉為gbk
深度分析
這種方法有一種弊端 就是當我們在跨平台的時候就會出現問題, 因此Python 為我們提供了一個方便的解決方案使用 unicode 作為輸出 -- 此方法不適用於raw_input
當需要列印輸出時,Python 會首先調取字元輸出程式(命令列或者輸出函數)的編碼格式,然後將該字串編碼成字元輸出程式所用的編碼(這樣字元輸出程式就不會因為認不出編碼而出現亂碼),接著字元輸出程式將編碼後的字元輸出到目的地。
解決方案
# 方法一 中文前加u, 告訴Python解譯器後面的是個unicode編碼str = u"彥雪"
# 方法二 str.decode('utf-8') 以utf-8編碼對字串 str 進行解碼, 擷取unicodestr = "彥雪".decode('utf-8')
# 方法三 unicode(str, 'utf-8') 將字串 str 以utf-8編碼解碼, 擷取unicodestr = unicode('彥雪','utf-8')
在windows命令視窗raw_input 顯示亂碼
使用raw_input 需要將中文轉換為系統編碼, 方法如下列所示
# 方法1 str.encode("gbk") 將unicode轉為gbk 編碼content = raw_input(u"輸入內容: ".encode("gbk"))
# 方法2content = raw_input("輸入內容: ".decode('utf-8').encode("gbk"))
# 方法3content = raw_input(unicode('輸入內容: ','utf-8').encode("gbk"))
雖然這種寫法很方便, 但是跨平台效果較差, 個人不推薦這種寫法, 建議中文字元和raw_input 分開寫. 通過其他手段達到在同一行的目的
擴充閱讀
Python的編碼注釋# -- coding:utf-8 --
PEP 263 -- Defining Python Source Code Encodings
關於Python的編碼、亂碼以及Unicode的一些研究
raw_input輸入、檔案讀取、變數比較等str、unicode、utf-8轉換問題
探尋
目前離職, 在等待的過程中, 分享下以前經常遇到的問題和大家探討, 希望對大家有所協助, 歡迎指正
在分享知識中尋找自我,享受編程之樂