一直以來我其實一直對python的編碼弄得很是暈,能正常編碼,也能處理一些狀況。可是始終不明白有些問題究竟爲什麼出,緣由是什麼,爲何要這樣用。python
今天晚上正好好好研究了一番解答了本身心中的困惑。python2.7
Q:python2.7.x裏面的中文表示究竟是什麼鬼?編碼
A:直接來看看spa
In [23]: x = '好很差喝都要喝' In [24]: x Out[24]: '\xe5\xa5\xbd\xe4\xb8\x8d\xe5\xa5\xbd\xe5\x96\x9d\xe9\x83\xbd\xe8\xa6\x81\xe5\x96\x9d'
這個x打印值相信熟悉編碼的盆友都知道,這是utf-8編碼。也就是說python2.7.x 在默認狀況下將中文默認轉到了utf-8編碼。code
這裏type(x)獲得結果是str對象
Q:python2.7.x裏的unicode究竟什麼鬼?blog
A:仍是經過例子來看看ip
In [16]: x = u'好很差喝就很好喝' In [17]: type(x) Out[17]: unicode
在2.7.x在中,u寫在字符串前面將會將一個字符串轉成unicode對象。utf-8
Q:python2.7.x中unicode能夠和str相加嗎?ci
A:仍是來看例子
In [62]: z = '好很差喝' In [63]: x = u'好很差喝都要喝' In [64]: z+x --------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-64-f964ff206363> in <module>() ----> 1 z+x UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
熟悉的報錯,可見在python2.7.x中,unicode中文和utf8中文是不能相加的由於是不一樣類型。
Q:那麼英文字符串能夠相加嗎?
A:能夠。具體就不掩飾了你們能夠本身試試。並且最終獲得的結果會被轉成全unicode
這兩個庫在對不管utf8仍是unicode對象進行中文編碼的時候,都會將內容轉成unicode再編碼。最後你拿到結果decode以後就變成了unicode對象,想要再拿到utf8對象,就須要再encode一次才能夠了。
一不注意就踩坑。