Python2.7 在windows命令視窗 輸出中文亂碼

來源:互聯網
上載者:User
本文執行個體講述了在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轉換問題

探尋

目前離職, 在等待的過程中, 分享下以前經常遇到的問題和大家探討, 希望對大家有所協助, 歡迎指正
在分享知識中尋找自我,享受編程之樂

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.