(一)字符串和編碼

????計算機只能處理數字,如果要處理文本,那么就先將文本轉換為數字。最開始,一個字節(bytes)有8個(bit)‘11111111’,一個字節表示的最大整數是255。ASCII編碼只把大小寫英文字母、數字和一些符號編碼到計算機。但是要處理中文的時候,需要至少兩個字節,所以中國就制定了GB2312編碼。
????unicode將全世界所有語言都統一到一套編碼里面了。unicode使用兩個字節進行編碼,多余的位置用0補全。當存儲的全都是英文的時候,就會導致浪費存儲空間,因為英文只需要一個字節存儲就夠了。
????因此,又出現了把 unicode 編碼轉化為可變長編碼的‘UTF-8’編碼。UTF-8 編碼把一個 unicode 字符根據不同的數字大小編碼成1-6個字節。英文為1字節,中文3個字節。

????計算機系統通用的字符編碼工作方式:
在計算機內存中,統一使用 unicode 編碼(因為內存快),當需要保存到硬盤或傳輸的時候,就轉換為 UTF-8 編碼。

????用記事本編輯的時候,從文本讀取的 UTF-8 字符被轉換為 unicode 字符保存到內存中,編輯完成后,保存的時候,再把 unicode 轉換為 UTF-8 保存到文件。

????瀏覽網頁的時候,服務器會把動態生成的 unicode 內容轉換為 UTF-8 再傳輸到瀏覽器。

由于python 的字符串是 str,在內存中以 unicode 表示,一個字符對應若干個字節。如果要在網絡上傳輸,或保存到磁盤上,就需要把 str 變為以字節為單位的 bytes
‘ABC’b‘ABC’,雖然顯示的內容一樣,但前者是 ·str·,而且bytes 的每個字符只占用一個字節,python 的一個字符可以占用幾個字節。
unicode 表示的 str 通過 encode() 方法可以編碼為指定的bytes
'ABC'.encode('UTF-8')
????反過來,如果我們在網站上讀取了字節流,那么讀到的就是 bytes。將 bytes 變為 str,就需要用 decode() 方法:
b'ABC'.decode()
len() 計算 str 的字符數:
len('ABC') 3
len('中文') 2
len() 計算 bytes 的字節數:
len(b'ABC') 3
len(b'中文') 6

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容