字符編碼
- 計算機由于是美國人發明,因此只有127個字母編碼到計算機里,也就是大小寫英文字母、數字和一些符號。該表又稱為ASCII編碼
- 中國制定了GB2312編碼來進行中文的編進
- 由于各個國家的編碼復雜性,Unicode應運而生,Unicode將所有的語言都統一到一套編碼里面,這樣就不會在有亂碼出現。
- ASCII編碼和Unicode編碼的區別是:ASCII編碼是1個字節,而Unicode是通常是2個字節。
- 盡管Unicode將編碼統一了,亂碼問題消失了,但是如果基本都是英文的話,用Unicode編碼要比ASCII編碼多一倍的存儲空間,在存儲和傳輸上是否不劃算;因此又出現了降Unicode編碼轉化為“可變成編碼”UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼為1個字節,漢字通常是3個字節,只有很生僻的才編碼為4-6個字節。
- 現在計算機系統通用的字符編碼工作:在計算機內存中統一使用Unicode,而需要保存到硬盤或者傳輸的時候,就轉換為UTF-8編碼;
- 關系例子
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 0100000 | 000000001000001 | 01000001 |
中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
Python字符串
- 在最新的Python3版本中,字符串是以Unicode編碼的,因此Python支持多種語言
- 對于單個字符的編碼,Python提供了
ord()
函數獲取字符的整數表示,chr()
函數把編碼轉換為對應的字符 - Python的字符串類型是str,在內存中以Unicode表示,一個字符對應若干個字節,如果要傳輸或者保存,需要將str轉換為字節為單位
bytes
;對于bytes
類型數據用帶b前綴的單引號或雙印好表示 - Pyhont提供
encode
和decode
l兩種方式進行字符編碼的轉換 -
len()
函數計算str是字符數,計算bytes則為字節數 - 為了避免亂碼問題,應當時鐘堅持使用UTF-8編碼對str和bytes轉換
格式化
- Python的格式化方式和C語言保持一致用
%
實現 - 字符串里面的
%
是一個普通的字符則需要轉移用%%
來表示%
總結
牢記采用UTF-8來編碼,亂碼將不再是問題,了解了ASCII、Unicode以及UTF-8的歷史不錯