字符與編碼
01 字符串本質
?
?
Python字符串相關概念
字符串 ????str
字節 ??????bytes
字節數組 ??bytearray
?
電腦字符串存儲機制
字符庫:A、B每個字符有一個代碼點如A是65? B為66,這種是方便人類讀寫的形式,但是最終需要存入計算機的CPU和內存,需要轉換成字節的二進制,就涉及到字節的編碼。
字節的編碼:如A的字節編碼為b開頭的b‘A’,對應的二進制為0100 0001(激素65的二進制編碼)
因為ASCII編碼比較簡單,直接把代碼點當成二進制編碼來存儲
將字符轉換為字節的過程我們稱為編碼,反之稱為解碼;如我們最常見的ASCII編碼就是負責編碼和解碼的工作
但是后來各個國家都有字節的字符集,就出現了很多字符集合字符編碼。
不同編碼并存的解決辦法,就是unicode,但是這個長度固定,有點浪費空間。現在比較流行的就是utf8是可變字節即可變長的編碼
?
?
?
?
02 ASCII UTF8編碼
?
?
ASCII:用于常見英文字符,存在一個Byte中,0-127(即代碼點)
Python插件ASCII代碼點和字符互查的函數
?
?
?
UTF-8最通用
?
?
?
?
?
03 字節與文本的編碼 解碼
?
?
字符編碼為字節
例子:
s1位字符,
使用encode(‘指定編碼’)編碼為字節,
其中b開頭意思為字節
中文用ASCII無法編碼,需要用UTF8進行編碼
?
?
?
字節解碼為字符
例子
B1位字節碼
?????? 利用decode(‘指定編碼’)進行解碼
?
?
?
?
Python的編碼和解碼不指定的話,默認為UTF8
?
?
Python的文件操作如果不指定編碼,默認以GBK操作(以操作系統編碼為準),所以文本操作建議指定編碼
?
?
04 bytes str bytesarray之間互相轉換
在內存表現的永遠是字符串,存儲或運算過程中總以字節形式存在
?
?
?
001字符到字節
(1)利用字符的方法encode
?
?
(2)文本形式以二進制進行讀取
?
?
(3)利用字節的bytes方法——字節大小不能超過256
?
?
?
?
?
002 字節到字符
?
?
?
?
?
003 字節數組bytearray
形式
?
?
(1)字符s1存入字節數組中,利用bytearray(字符串,編碼)
?
?
(2)字節數組可以通過下標取值 ?可以改變值
?
?
(3)支持很多列表的很多方法
?
?
Append的值大小不能超過256
?
?
?
(4)字節數組轉換為字符
?
?
?
?
05 字符串BOM處理
BOM字節順序標記
?
?
?
有一個文件data.txt
?
?
打開讀取內容,想忽略字節順序標記
?
?
?
?
字節寫入文件,寫入字節順序標記
?
?
?