在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類型支持解碼操作。