1. 程式人生 > >python輸出中文報錯的真正原因,及解決辦法(基於pycharm)

python輸出中文報錯的真正原因,及解決辦法(基於pycharm)

編譯器 網上 err 設備 class charm 就是 tin sta

通常python3裏面如果有中文,在不連接其他設備和程序的情況下,報錯信息大致如下:

SyntaxError: Non-UTF-8 code starting with ‘\xd6‘ in file

這裏面的\xd6可以是其他編碼,代表的是你程序裏第一個中文的前兩位編碼

原因:你的程序裏變量的編碼方式和編譯器解析的編碼方式不一致,而從編譯器的報錯信息可以看出,編譯器的編碼是utf-8

解決方法:使程序裏變量的編碼方式和編譯器解析的編碼方式保持一致

那麽問題來了,兩個編碼方式為什麽不一樣呢,網上非常流行的解釋:有中文就要加#coding:gbk,因為中文需要gbk來編碼;這個解釋是錯的,因為utf-8也可以對中文編碼所以問題在於我們程序裏的變量編碼方式不是utf-8

我們程序中變量的編碼方式設定路徑:file-settings-editor-file encodings-project encoding(默認被選成了GBK,原因我也不知道)

解決方法一:如果我們把項目的編碼方式設定為utf-8,那麽變量的編碼方式就是utf-8 ,python的默認編碼方式也是utf-8,那就可以正常輸出中文什麽其他代碼都不用加

s="中文"
print(s)

輸出

中文

解決方法二:在代碼上方加一行#coding:gbk;這就是在告訴編譯器,我變量的編碼方式是GBK,你要用GBK來解碼,同樣也可以解決問題

#coding:gbk
s="中文"
print
(s)

輸出

中文

問題解決了,但是要註意:如果用第一種方式解決問題,那你的變量是utf-8編碼,如果用第二種方式解決問題,那麽你的變量是gbk編碼

這個在寫文件的時候,會對寫入值有影響,要尤其註意

註:python2的原理是一樣的,只不過python2的報錯形式更多

作者言:在我看來,pycharm應該把編碼格式默認成utf-8的,甚至是寫死成utf-8,這也符合python的編碼風格,簡單粗暴;反正程序裏如有必要寫入gbk編碼。一對encode和decode,不就搞定了嗎

python輸出中文報錯的真正原因,及解決辦法(基於pycharm)