一、字符編碼
1.計算機三大核心硬件
CPU:將數據渲染給用戶
內存:臨時存取數據,斷電消失
硬盤:永久保存數據,斷電還有
2.什麼是字符編碼?
人類能識別的是字符的高級標識符,電腦只能識別0,1,要完成人與機器之間的信息交流一定需要一個媒介,進行兩種標識符的轉化(兩種標識符的duiying關係)
對應關係形成的結構稱之爲:編碼表
編碼表的發展史
1.ascii(ASCII):字母,數字,英文符號與計算機01標識符的對應關係
思考:如何將128個字符用01完全標識
二進制:1111 1111 => 255 => 1bytes(1字節) => 8個二進制位
2.中國:研究漢字與計算機01標識符的對應關係:gb2312 => GBK(常用)=> GB18030
日本:Shift_JIS
韓國:Euc_kr
亂碼:存數據和讀數據採用的編碼表不一致
軟件打開文件讀取數據的流程:
- 打開軟件
- 往計算機發送一個打開文件的指令,來打開文件
- 讀取數據渲染給用戶
python解釋器打開py文件
- 打開軟件(python解釋器)
- 往計算機發送一個打開文件的指令,來打開文件
- 逐行解釋打開的文件內容(存取編碼不一致,無法正常解釋,崩潰),將執行結果展示給用戶
python 解釋失敗的原因:
py2默認AscII來解釋文件內容,py3默認按UTF-8來解釋文件內容
文件頭:# encoding:GBK
功能:告訴py解釋器按照什麼編碼解釋文件內容
製造一個可以完成萬國字符與計算機01標識符的對應關係的編碼表
編碼表:unicode表
py2:ASCII,沒有按萬國編碼,原因py2誕生先於萬國編碼
py3:utf-8,採用萬國編碼來解釋文本內容
思考:unicode與utf-8什麼關係
unicode:用2個字節存儲漢字,用2個字節存儲英文字母,佔有空間較多,讀取效率極高
utf-8:用3-6個字節存儲漢字,用1個字節存儲英文字母,佔有空間較少(所佔字節數,字符),讀取效率低
總結:內存都是按unicode存儲數據,硬盤和CPU按utf-8來存取數據。unicode和utf-8採用一張unicode編碼表,utf-8是unicode的一種體現方式,變長存取數據。
變長存取優勢:大量數據都是以英文存在,所以utf-8空間更小,傳輸速度更快。
二、三種字符串
1.三種字符串例子
(1)unicode字符串,默認字符串
s1 = u’abc你好\n不好’
(2)字節字符串
s2 = b’abc123\xb7\xb7’
(3)原義字符串:不對字符串內部做任何操作(eg:\n的轉化)
s3 = r’abc你好\n不好’
2.編碼與解碼
s = '123呵呵'
b = bytes(s, encoding='utf-8')
print(b)
b = b'123\xe5\x91\xb5\xe5\x91\xb5'
n_s = str(b, encoding='utf-8')
print(n_s)
或者
#將u字符串編碼成b字符串 原始的到二進制
u''.encode()
print(u'你好'.encode('utf-8'))
#將b字符串解碼成u字符串 二進制到原始的
b''.decode()