python在WIN下CMD運行中文亂碼及python 2.x python 3.x編碼問題


在CMD中運行python代碼時,我們會發現,即使在代碼中加入# -*- coding:utf-8 -*- 這段代碼,中文仍然會亂碼。如下:

# -*- coding:utf-8 -*- content = "我是中文" print content
  • 1
  • 2
  • 3

運行結果: 
這里寫圖片描述 
有夠亂的吧!~~ 
網上搜索的方法中說,把CMD的編碼格式改為UTF-8格式,命令介紹:

chcp 65001 #轉換為utf-8代碼頁 chcp 936 #轉換為默認的gbk
  • 1
  • 2

一般CMD默認gbk,在CMD窗口中輸入chcp 65001 修改為utf-8 
這里寫圖片描述 
修改之后就是這樣的,OK,我們再次運行代碼,看看會不會亂碼: 
這里寫圖片描述 
很遺憾,還是亂碼,這樣的話,只能從代碼入手了,因為CMD默認gbk編碼,所以只能把代碼中的中文進行gbk編碼了。 
utf-8通過解碼轉化為unicode,然后將unicode編碼轉化為gbk 
代碼:

# -*- coding:utf-8 -*- content = "我是中文" content_unicode = content.decode("utf-8") content_gbk = content_unicode.encode("gbk") print content_gbk
  • 1
  • 2
  • 3
  • 4
  • 5

這里寫圖片描述 
中文就顯示成功了,記得將CMD調回gbk編碼再運行程序。

python3.x

python3.x中在CMD中中文輸出不會亂碼。

# -*- coding:utf-8 -*- content = "我是中文" print(content)
  • 1
  • 2
  • 3

這里寫圖片描述

python2.x和python3.x產生差別的原因:

主要是二者對於字符串的編碼不同 
python 2.x: 
這里寫圖片描述 
python 2.x的字符串是有編碼的,默認為ascii,但如果在其中寫中文的話,解釋器一般會報錯,所以都在代碼第一行或者第二行規定編碼格式: 
# -*- coding:utf-8 -*- 
想要轉換為其他編碼,就要進行先解碼為unicode再編碼的過程。 
python 3.x 
這里寫圖片描述 
python 3.x的字符串類似python 2.x的unicode,是沒有經過編碼的,因此python 3.x的字符串沒有decode屬性,只有encode屬性,調用這個方法后將產生bytes類型的字符串(有點像python 2.x中的字符串),而bytes類型支持解碼操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM