python-字串

CannedDream發表於2020-12-01

 

一、字元編碼

 

1. 最早使用的編碼方式為ASCII編碼,ASCII編碼是1個位元組,例如:字母A用ASCII編碼是十進位制的65,二進位制的01000001

 

2. Unicode編碼是將所有語言統一到一套編碼裡,避免亂碼,Unicode編碼是2個位元組,例如:字母A用Unicode編碼是十進位制的65,二進位制的 00000000 01000001

 

3. UTF-8編碼是將Unicode編碼轉化為可變長的編碼,可節省空間。通常,英文字母被編碼成1個位元組,漢字被編碼成3個位元組,生僻的字元被編碼成4~6個位元組

 

4. ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支援ASCII編碼的軟體可以在UTF-8編碼下繼續工作

 

5. 在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼

 

6. <meta charset="UTF-8" />,表示該網頁正是用的UTF-8編碼

 

 

二、python的字串

 

1. 對於單個字元的編碼,ord()函式表示將字元轉換為整數,chr()函式表示將編碼轉換為對應的字元

 

例如:

1 >>> ord('A')
2 65
3 >>>ord('')
4 20013
5 >>> chr(66)
6 'B'
7 >>>chr(20013)
8 ''

 

2. python中字串型別是str,在記憶體中用Unicode表示,一個字元對應若干個位元組。若要在網路上傳輸或者儲存在磁碟上,需要把str轉換為以位元組為單位的bytes

 

    對bytes型別的資料要用帶b字首的單引號或雙引號表示,例如:a=b'ABC',而b='ABC'表示的為str型別

 

    bytes型別的資料每個字元佔1個位元組,如上a共佔3個位元組

 

3. 以Unicode表示的str可以通過encode()方法編碼成指定的bytes(字元轉換為位元組,用於網路上傳輸或者是將字元儲存在磁碟上時)

 

例如:

1 >>> 'ABC'.encode('ascii')
2 b'(ABC')
3 >>> '中文'.encode('utf-8')
4 b'\xe4\xb8\xad\xe6\x96\x87'

 

4. 在網路上或者是磁碟上讀取位元組流時,讀取到的是bytes,將bytes轉換為str需要用到decode()方法(位元組轉換為字元)

 

例如:

1 >>> b'ABC'.decode('ascii')
2 'ABC'
3 >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
4 '中文'

 

如果bytes中只有一小部分無效的位元組,可以傳入引數errors='ignore'忽略錯誤的位元組

 

5. len()函式可用來計算包含的位元組數或者字元數

 

例如:

 1  #計算字元數
 2  >>> len('ABC')
 3  3
 4  >>> len('中文')
 5  2
 6  #計算位元組數
 7  >>> len(b'ABC')  #一個英文字元通常佔一個位元組
 8  3
 9  >>> len('中文'.encode('utf-8')  #一箇中文字元通常佔三個位元組
10  6
11  >>> len(b'\1\1\1\1\1\1')
12  6

 

相關文章