python2.7.x 以Unicode表示的str用u'...'表示---(沒有u,中文是亂碼)
python3.x.x 默認(rèn)以Unicode表示str (可以加u)
Unicode表示的str轉(zhuǎn)化成utf-8格式
python2.7.x u'ABC'.encode('utf-8')
python3.x.x 'ABC'.encode('utf-8')
英文字符轉(zhuǎn)換后表示的UTF-8的值和Unicode值相等(但占用的存儲空間不同)
而中文字符轉(zhuǎn)換后1個Unicode字符將變?yōu)?個UTF-8字符
把UTF-8編碼表示的字符串'xxx'轉(zhuǎn)換為Unicode字符串 'xxx'.decode('utf-8')
腳本中
#!/usr/bin/env python
# -*- coding: utf-8 -*-
并且中文字符串必須是Unicode格式
字符與字節(jié)的轉(zhuǎn)換
1.由于Python的字符串類型是str,在內(nèi)存中以Unicode表示,一個字符對應(yīng)若干個字節(jié)。
2.如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上,就需要把str變?yōu)橐宰止?jié)為單位的bytes。
3.Python對bytes類型的數(shù)據(jù)用帶b前綴的單引號或雙引號表示
例子: x=b'ABC'
要注意區(qū)分'ABC'和b'ABC',前者是str,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個字符都只占用一個字節(jié)。
以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
純英文的str可以用ASCII編碼為bytes,內(nèi)容是一樣的,含有中文的str可以用UTF-8編碼為bytes。
含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。
在bytes中,無法顯示為ASCII字符的字節(jié),用\x##顯示。
反過來,如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes。
要把bytes變?yōu)閟tr,就需要用decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
len()函數(shù)計算的是str的字符數(shù),如果換成bytes,len()函數(shù)就計算字節(jié)數(shù):
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))---------------python3
6
特別注意:
>>>len('中文')--------------------------python3
2
>>>len(u'中文')-------------------------python2
2
>>>len('中文')-------------------------python2
6
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。