Unicode把所有語言都統一到一套編碼裏,最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。
ASCII編碼是1個字節,而Unicode編碼通常是2個字節。
UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。
ord()
函數獲取字符的整數表示,chr()
函數把編碼轉換爲對應的字符。
>>> ord("大") >>> chr(22823) |
由於Python的字符串類型是str
,在內存中以Unicode表示,一個字符對應若干個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str
變爲以字節爲單位的bytes
。
Python對bytes
類型的數據用帶b
前綴的單引號或雙引號表示:
x =b'ABC'
要注意區分'ABC'
和b'ABC'
,前者是str
,後者雖然內容顯示得和前者一樣,但bytes
的每個字符都只佔用一個字節。
以Unicode表示的str
通過encode()
方法可以編碼爲指定的bytes
>>> 'ABC'.encode('ascii')
b'ABC'
從網絡或磁盤上讀取了字節流,那麼讀到的數據就是bytes
。要把bytes
變爲str
,就需要用decode()
方法:
>>> b'ABC'.decode('ascii')
'ABC'
要計算str
包含多少個字符,可以用len()
函數,如果換成bytes
,len()
函數就計算字節數。
>>> len('中文')
2
>>> len('中文'.encode('utf-8'))
6
爲了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行註釋是爲了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;
第二行註釋是爲了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
申明瞭UTF-8編碼並不意味着你的.py文件就是UTF-8編碼的,必須並且要確保文本編輯器正在使用UTF-8 without BOM編碼。
格式化
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
%
運算符就是用來格式化字符串的。在字符串內部,%s
表示用字符串替換,%d
表示用整數替換,有幾個%?
佔位符,後面就跟幾個變量或者值,順序要對應好。如果只有一個%?
,括號可以省略。
來源: