1. 程式人生 > >Python2.x編譯器列印中文出現亂碼的三種解決方案(本人以VS2017與VS Code為例,使用其他整合開發工具的也可參考下)

Python2.x編譯器列印中文出現亂碼的三種解決方案(本人以VS2017與VS Code為例,使用其他整合開發工具的也可參考下)

本文主要介紹了三種解決方案:

解決方案一:在需要列印的中文字元前加個u,用於標識所要列印的是一個Unicode字串。(我感覺著一種方法是最簡單和省事的,並且使用其他整合開發工具的若遇到類似的問題,也應該可以使用這種方法解決,具體大家可以在下方評論)(測試此方法不適合在Vistual Stdio Code中使用,可以參考解決方案二)

解決方案二:使用encode與decode方法,把編碼從UTF-8轉到GBK以在CMD中正常顯示。

解決方案三:因為在Python3中,對中文進行了全面的支援,所以我們可以使用Python 3.x的編譯器。

問題原因討論:

筆者使用Visual Stdio 2017——15.7.4、Python 2 64-bit(2.7.14)編譯器。(其他版本的VS和Python2.x的解決辦法應該都是一樣的)

Python2預設採取的ASCII編碼,字母、標點和其他字元只使用一個位元組來表示。然而我們知道對於中文字元來說,一個位元組是滿足不了需求的,中文編碼是用兩個位元組來表示的,因而如果我們在python原始檔中加入了中文(包括打不僅僅侷限於註釋部分),則必須使用“#coding=utf-8”或“#-*- coding:utf-8 -*-”來宣告編碼格式。然而CMD下預設的編碼方式為:GBK,這與我們宣告的UTF-8是不一樣的,因而如果GBK與UTF-8混合使用的話,就會導致解碼錯誤,從而導致亂碼。

解決方案一:在需要列印的中文字元前加個u,用於標識所要列印的是一個Unicode字串。

解決方案二:使用encode與decode方法,把編碼從UTF-8轉到GBK以在CMD中正常顯示。

參考如下程式碼,其中encode代表編碼,decode代表解碼。

這種方法每次使用比較麻煩?如果使用比較多的話,我們完全可以寫成一個方法嘛。

#coding=utf-8

#定義函式
def t(x):
    print x.decode('UTF-8').encode('GBK'),

#測試效果
print '測試一'.decode('UTF-8').encode('GBK')
t('測試二')

執行結果:

以下是我具體使用例項

執行結果:

解決方案三:因為在Python3中,對中文進行了全面的支援,所以我們可以使用Python 3.x的編譯器。

在Python3中,不需要來回的編解碼,並且字串物件也沒有decode與encode方法。