python2.7.x的字符串編碼到底什麼鬼?(中文和英文的處理)

一直以來我其實一直對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一次才能夠了。

一不注意就踩坑。

相關文章
相關標籤/搜索