一次明白,徹底讓你不用擔(dān)心python中文與編碼了

當(dāng)你在python中使用中文時,你一定見過下面的錯誤

SyntaxError: Non-ASCII character '\xe6' in file ./filename.py on line 3, but no encoding declared。

你一定聽過什么是編碼

比如,ascii,utf-8,gbk……。這些總的來說就是如何把一個字或者字母編碼成計算機(jī)能認(rèn)識的0和1
比如我舉“你好,python"這句話:
'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8cpython'(utf8)
'\xc4\xe3\xba\xc3\xa3\xacpython'(gbk)
至于ascii,不支持中文,寧打的化,就是錯誤:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

你必須要知道的string 和 unicode 區(qū)別

string object是由characters組成的sequence,而unicode object是Unicode code units組成的sequence。
unicode就是 Unicode code units組成的序列,比如還是上面那句話:
u'\u4f60\u597d\uff0cpython'
而至于string這貨,character是有多種編碼方式的,比如單字節(jié)的ASCII,雙字節(jié)的GB2312等等,再比如UTF-8。要想解讀string,必需知道string里的character是用哪種編碼方式,然后才能進(jìn)行因為編碼。
關(guān)于這些你要記住的只有一點:python所有編碼都以unicode作為中轉(zhuǎn)。 有了這句話,python編碼就不是問題了。
我還是舉上面那句話的例子:
print '你好,python'時發(fā)生了什么?

  1. python將'你好,python'轉(zhuǎn)換成了unicode即:
    u'\u4f60\u597d\uff0cpython'
    2.根據(jù)python的默認(rèn)編碼,把unicode轉(zhuǎn)換成相應(yīng)的編碼,這里是unicode->ascii。因為ascii不支持中文,所以就報了錯。

設(shè)定unicode轉(zhuǎn)換成哪種編碼的string

這很簡單,想沒有報錯,只要從unicode中轉(zhuǎn)時,轉(zhuǎn)換成系統(tǒng)的默認(rèn)編碼就行了。
比如linux的utf8下(win下,改成gbk就好):

utest=u'你好,python'
u'\u4f60\u597d\uff0cpython'
utestutf8=utest.encode("utf-8")
'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8cpython'

這樣print utestutf8 就是'你好,python'

我不能每一次都用encode吧。

當(dāng)然,這個就是多數(shù)教程講的,設(shè)定默認(rèn)編碼的注釋:

-- coding: UTF-8 --

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容