一。Python 3版本中,字符串是以Unicode編碼的,支持多種編碼語言
ord()
函數:獲取字符的整數表示,返回值是對應的十進制整數
ord()
函數是 chr() 函數(對於8位的ASCII字符串)或 unichr() 函數(對於Unicode對象)的配對函數,它以一個字符(長度爲1的字符串)作爲參數,返回對應的 ASCII 數值,或者 Unicode 數值,如果所給的 Unicode 字符超出了你的 Python 定義範圍,則會引發一個 TypeError 的異常。
chr()
函數:把編碼轉換爲對應的字符
chr()
用一個範圍在 range(256)內的(就是0~255)整數作參數,返回一個對應的字符.
>>> chr(66)
'B'
>>> chr(25991)
'文'
二。字符串編碼
如果要在網絡上傳輸,或者保存到磁盤上,就需要把str
變爲以字節爲單位的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 "<stdin>", line 1, in <module>
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')
'中文'
可見,1箇中文字符經過UTF-8編碼後通常會佔用3個字節,而1個英文字符只佔用1個字節。
在操作字符串時,我們經常遇到str
和bytes
的互相轉換。爲了避免亂碼問題,應當始終堅持使用UTF-8編碼對str
和bytes
進行轉換。
三。格式化
%
運算符就是用來格式化字符串的。在字符串內部,%s
表示用字符串替換,%d
表示用整數替換,有幾個%?
佔位符,後面就跟幾個變量或者值,順序要對應好。如果只有一個%?
,括號可以省略。
常見的佔位符有:
%d | 整數 |
%f | 浮點數 |
%s | 字符串 |
%x | 十六進制整數 |
其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
如果你不太確定應該用什麼,%s
永遠起作用,它會把任何數據類型轉換爲字符串:
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
有些時候,字符串裏面的%
是一個普通字符怎麼辦?這個時候就需要轉義,用%%
來表示一個%
:
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'