本節(jié)內(nèi)容:


  1. 前言

  2. 相關(guān)概念

  3. Python中的默認(rèn)編碼

  4. Python2與Python3中對字符串的支持

  5. 字符編碼轉(zhuǎn)換

一、前言


Python中的字符編碼是個(gè)老生常談的話題,同行們都寫過很多這方面的文章。有的人云亦云,也有的寫得很深入。近日看到某知名培訓(xùn)機(jī)構(gòu)的教學(xué)視頻中再次談及此問題,講解的還是不盡人意,所以才想寫這篇文字。一方面,梳理一下相關(guān)知識,另一方面,希望給其他人些許幫助。

Python2的 默認(rèn)編碼 是ASCII,不能識別中文字符,需要顯式指定字符編碼;Python3的 默認(rèn)編碼 為Unicode,可以識別中文字符。

相信大家在很多文章中都看到過類似上面這樣“對Python中中文處理”的解釋,也相信大家在最初看到這樣的解釋的時(shí)候確實(shí)覺得明白了??墒菚r(shí)間久了之后,再重復(fù)遇到相關(guān)問題就會覺得貌似理解的又不是那么清楚了。如果我們了解上面說的默認(rèn)編碼的作用是什么,我們就會更清晰的明白那句話的含義。

需要說明的是,“字符編碼是什么”,以及“字符編碼的發(fā)展過程” 不是本節(jié)討論的話題,這些內(nèi)容可以參考我之前的 <<這篇文章>>

二、相關(guān)概念


1. 字符與字節(jié)

一個(gè)字符不等價(jià)于一個(gè)字節(jié),字符是人類能夠識別的符號,而這些符號要保存到計(jì)算的存儲中就需要用計(jì)算機(jī)能夠識別的字節(jié)來表示。一個(gè)字符往往有多種表示方法,不同的表示方法會使用不同的字節(jié)數(shù)。這里所說的不同的表示方法就是指字符編碼,比如字母A-Z都可以用ASCII碼表示(占用一個(gè)字節(jié)),也可以用UNICODE表示(占兩個(gè)字節(jié)),還可以用UTF-8表示(占用一個(gè)字節(jié))。字符編碼的作用就是將人類可識別的字符轉(zhuǎn)換為機(jī)器可識別的字節(jié)碼,以及反向過程。

UNICDOE才是真正的字符串,而用ASCII、UTF-8、GBK等字符編碼表示的是字節(jié)串。關(guān)于這點(diǎn),我們可以在Python的官方文檔中經(jīng)??梢钥吹竭@樣的描述"Unicode string" , " translating a Unicode string into a sequence of bytes"