作為一個用慣了python3的人,在python2如此操蛋的編碼問題中,不得不整理一下python2中字符串和字節(jié)串之間的關(guān)系。
先說一個原理,python中字節(jié)串可以解碼成字符串,字符串可以編碼成字節(jié)串。
Python3中的編碼方式
文本字符串類型(Unicode編碼)被命名為 str , 字節(jié)字符串類型被命名為 bytes ,就這兩種。其中,str有encode方法,byte有decode方法

總結(jié)python3的特點
str表示字符串,byte表示字節(jié)串
Python2中的編碼方式
but! python2有unicode、str兩種對象,首先,python2的str其實是byte存儲的,也就是說,python3里面的byte里面存的東西和python2str里面存的是一樣的。然后,python3里面的str對象在python2里面叫做unicode對象。
關(guān)于python2中的兩種對象,使用方法如下:
Python2 str 有decode方法
Python2 unicode有encode方法
操作如下:

以上兩種方法
其實python2也有byte類的聲明,但是Python2的byte和str其實是一種東西:

Python2的隱式轉(zhuǎn)換
大家要注意的是,Python2中str有一個encode方法,unicode有一個decode方法,這兩個方法沒軟用。
如果對str調(diào)用encode方法,python會隱式的先對str調(diào)用decode方法獲取對應(yīng)的字符串,然后再對字符串調(diào)用encode方法:

上面的例子中
b.decode('GBK')
b.encode('ascii').decode('GBK')
兩行代碼是一樣的
總結(jié)python2的特點
str表示字節(jié)串,unicode表示字符串
最后一句話,搞清楚字節(jié)串和字符串,字節(jié)串可以解碼,字符串可以編碼。
奇特的unicode_escape與string_escape
關(guān)于python2的encode方法中,有一類把字節(jié)串變成真正的轉(zhuǎn)義字節(jié)串的方法:

其中這個字符完全的變了長度,換了模樣
還有一個unicode-escape,這兩個方法比較特殊,其中
對str調(diào)用encode('string_escape'),可以把str變成str,內(nèi)容轉(zhuǎn)義
對str調(diào)用decode('string_escape'),可以把str變成str,內(nèi)容逆轉(zhuǎn)義
對str調(diào)用decode('unicode_escape'),可以把str變成unicode,內(nèi)容一定要是unicode轉(zhuǎn)義過的字符,否則會變成奇奇怪怪的東西
-
對str調(diào)用encode('unicode_escape'),等于.decode('ascii').encode('unicode_escape'),隱式轉(zhuǎn)義會導(dǎo)致非ascii碼報錯
str轉(zhuǎn)義 對unicode調(diào)用encode('unicode_escape'),可以把unicode變成str,內(nèi)容轉(zhuǎn)義
對unicode調(diào)用decode('unicode_escape'),等于.encode('ascii').decode('unicode_escape'),隱式轉(zhuǎn)義會導(dǎo)致非ascii碼報錯
對unicode調(diào)用encode('string_escape'),函數(shù)報錯,報錯內(nèi)容為只能針對str操作
-
對unicode調(diào)用decode('string_escape'),等于.encode('ascii').decode('string_escape'),隱式轉(zhuǎn)義會導(dǎo)致非ascii碼報錯
unicode轉(zhuǎn)義
總結(jié)
- 對str可以調(diào)用decode方法,將內(nèi)容逆轉(zhuǎn)義回來,但是多了一個encode('string_escape')而且不報錯(個人感覺很神奇)
- 對encode可以調(diào)用encode('unicode_escape')方法
ref:
- PYTHON編碼的前世今生http://python.jobbole.com/86578/
- Python2和Python3之間關(guān)于字符串編碼處理的差別https://blog.csdn.net/yanghuan313/article/details/63262477

