基石爲勤能補拙的迷宮之旅——第七天(Python字符編碼和三種字符串)

一、字符編碼

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

亂碼:存數據和讀數據採用的編碼表不一致

    軟件打開文件讀取數據的流程:

  1. 打開軟件
  2. 往計算機發送一個打開文件的指令,來打開文件
  3. 讀取數據渲染給用戶

    python解釋器打開py文件

  1. 打開軟件(python解釋器)
  2. 往計算機發送一個打開文件的指令,來打開文件
  3. 逐行解釋打開的文件內容(存取編碼不一致,無法正常解釋,崩潰),將執行結果展示給用戶

    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()
發佈了27 篇原創文章 · 獲贊 16 · 訪問量 4275
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章