在IDLE中執行下面代碼,中文顯示正常:
# -*- coding:utf-8 -*-
st=raw_input("請輸入內容")
print st
但在CMD中執行e:\hello.py,則中文會出現亂碼,是什么原因呢?
從下圖可以看出utf-8和gbk都可以通過編碼和解碼與unicode進行轉換,那么如果utf-8轉化為gbk該怎么辦呢?首先,utf-8通過解碼轉化為unicode,然后通過unicode編碼轉化為gbk

現在回答上面的問題,為什么CMD會出現亂碼呢?這是因為我們寫的py程序是utf-8編碼的,通過python程序編譯后,也是編譯為utf-8編碼,而這時cmd是通過gbk進行解析的,gbk解析utf-8,當然會出現亂碼了。
知道原因后,我們來看解決方案:
1、2.7中把程序中的漢字轉為gbk編碼:
# -*- coding:utf-8 -*-
concent = "請輸入內容:"
#將字符串由utf-8解碼為unicode
c_unicode = concent.decode("utf-8")
#將解碼后的字符串編碼為gbk
c_gbk = c_unicode.encode("gbk")
st=raw_input(c_gbk)
print st
其實只需要把utf-8轉化為unicode編碼就可以,因為當windows的CMD遇到unicode編碼時,會自動給你轉化為gbk編碼,所以程序也可以這樣:
# -*- coding:utf-8 -*-
concent = "請輸入內容:"
#將字符串由utf-8解碼為unicode
c_unicode = concent.decode("utf-8")
st=raw_input(c_unicode)
print st
另外python3x中沒有unicode類型,但可以支持從utf-8直接解碼轉換為gbk,代碼如下:
# -*- coding:utf-8 -*-
concent = "請輸入內容:"
#將字符串由utf-8解碼為gbk
c_gbk = concent.decode("gbk")
st=raw_input(gbk)
print(st)
2、將CMD終端改為UTF-8格式
命令介紹:
chcp 65001 #換成utf-8代碼頁
chcp 936 #換成默認的gbk
chcp 437 #美國英語
一般默認為gbk,若要修改成 utf-8,則需要:
1)、cmd窗口輸入:
chcp 65001
2)、修改cmd屬性:
選擇字體為“Lucida Console”
3、改為UTF-8后可能出現字符重疊或不能輸入中文的現象,調整回GBK格式的方法







