「可變長編碼」utf-8
編碼可根據內容改變位元組數,ascii
編碼實際上可以被看成是utf-8
編碼的一部分
python提供了ord()函式獲取字元的整數表示,chr()函式把編碼轉換為對應的字元:
>>> ord('a')
65>>> ord('中')
20013
>>> chr(66)
'b'>>> chr(25991)
'文'
如果知道字元的整數編碼,還可以用十六進製制這麼寫str:
>>>
'\u4e2d\u6587'
'中文'
兩種寫法完全是等價的。
由於python的字串型別是str
,在記憶體中以unicode表示,乙個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把st
r變為以位元組為單位的bytes
。
python對bytes
型別的資料用帶b
字首的單引號或雙引號表示:
x = b'abc'
要注意區分'abc'
和b'abc'
,前者是str
,後者雖然內容顯示得和前者一樣,但bytes
每個字元都只占用乙個位元組。
以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 "", line 1, in
unicodeencodeerror: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
純英文的str
可以用ascii
編碼為bytes
,內容是一樣的,含有中文的str
可以用utf-8
編碼為bytes。含有中文的str
無法用ascii
編碼,因為中文編碼的範圍超過了ascii
編碼的範圍,python會報錯。
在bytes中,無法顯示為ascii
字元的位元組,用\x##
顯示。
反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes
。要把bytes
變為str
,就需要用decode()
方法:
>>>
b'abc'.decode('ascii')
'abc'
>>>
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
要計算str包含多少個字元,可以用len()
函式:
>>> len('abc')
3>>> len('中文')
2
len()
函式計算的是str
的字元數,如果換成bytes
,len()
函式就計算位元組數:
>>> len(b'abc')
3>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6>>> len('中文'.encode('utf-8'))
6
python3自學筆記3 字串和編碼
摘錄自 廖雪峰python3.5教程 內容 字串和編碼 目錄 一 字元編碼的發展 二 python的字串 正文 一 字元編碼的發展 美國人在發明計算機編碼時只將大小寫英文本母 數字和一些符號共127個字母編碼到計算機中,稱為ascaii編碼。最早的計算機以8個位元為乙個位元組,所以乙個位元組能表示最...
python 3字元編碼
在python2中預設是ascii編碼,python3是utf 8編碼 在python 的源 檔案中經常會看到 a 中文 type a str b bytes a,encoding utf 8 bb xe4 xb8 xad xe6 x96 x87 type b bytes 以上的 都在python ...
3 字元編碼
字元編碼 編者的話 從磁碟中讀取資料時,直接將存在檔案中的二進位制轉換成unicode的二進位制存到記憶體中,需指定乙個編碼如utf 8,前提是檔案在儲存時是以utf 8儲存的.系統中維護了一張關於utf 8到unicode的表,存檔案時,直接通過這張表將記憶體中unicode的二進位制翻譯成utf...