教你讀懂python3和python2中的編碼問題

2021-08-27 15:59:06 字數 1185 閱讀 1372

最近又有很多小夥伴說被python中的編碼問題搞得好暈。一會unicode,一會又是bytes,python2跟3還是反過來的,為何在2中只能decode(解碼),到3又只能encode(編碼)。今天我們就來說一說這個問題。

首先我們得先了解一下,什麼是字元編碼?

計算機想要工作必須通電,也就是說「電」驅動計算機幹活,而「電」的特性,就是高低電平(高低電平即二進位制數1,低電平即二進位制數0),也就是說計算機只認識01兩種數字。我們想要儲存資料,首先 得將我們的資料進行一些處理,最終得轉換成00101類似的才能讓計算機識別。

所以我們必須有乙個過程:

字元 ----------> (翻譯)--------------->  數字

這個過程實際就是乙個字元如何對應乙個特定數字的標準,這個標準稱為字元編碼。

用大白話來說就是,計算機不認識我們現實世界的數字還有字母,那麼我們就規定了一本字典(ascii碼表),如下圖。然後告訴計算機,以後如果我們輸入a,就是十進位制97,然後你自己再翻譯成二進位制,再幫我顯示出來,你不用關心我們輸入的是什麼意思,只要翻譯就好,懂不懂?計算機說:老大,我懂了。然後從此我們就可以在計算機上顯示字母數字跟一些特殊符號了。然而,這是美國人的字典,他們怎麼會想到還有我們博大精深的中文文化呢?

這時候我們中國也要用電腦,但都是全英文,我們想輸入漢字,那怎麼辦。一向來聰明的我們就自己寫了一本字典(gbk),然後也是告訴計算機,以後就按照這本字典來顯示。

最開始那本,也就是ascii碼,用低7位來表示128個字元,後面剩下的就空著。而我們gbk呢,是用2個位元組(bytes)來表示乙個漢字,這樣一下來就可以顯示6w+漢字了。

但這樣有個問題,每個國家都有自己的字典,以後你用你的字典跟計算機做的事,我想看,但是我沒你的字典就不知道你們幹了什麼事情,那我豈不是很沒面子。這時候,大佬們就坐下來商量,說我們要有一套標準,讓所有語言都可以用一本字典來表示,這時候,萬國碼unicode就誕生了。

unicode 最初也是採用兩個位元組編碼字元,後來發現不夠用才擴充套件為四個位元組(與 ucs-4 對應)。理論上 ucs-4 編碼範圍能達到 u+7fffffff,容納二十多億個字元,但是因為 unicode 和 iso 達成共識,只會用到 17 個平面,包含 1 個基本平面(bmp)和 16 個輔助平面,最高碼位 u+10ffff。

未完待續

python3 切片 python3 切片

取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下 l michael sarah tracy bob jack 取前3個元素,應該怎麼做?笨辦法 l 0 l 1 l 2 michael sarah tracy 之所以是笨辦法是因為擴充套件一下,取前n個元素就沒轍了。取前n...

Python3 和 is 的區別

本文由 luzhuo 編寫,請保留該資訊.原文 以下 以python3.6.1為例 less is more is 判斷兩個物件是否為同一物件,是通過id來判斷的 當兩個基本型別資料 或元組 內容相同時,id會相同,但並不代表a會隨b的改變而改變 判斷兩個物件的內容是否相同,是通過呼叫eq 來判斷的...

python3類和物件

類的定義和例項化 python定義簡單類如下。class car object pass c1 car 我們定義了乙個car類,其中什麼方法也沒有實現。c1是我們實力化的類 car,成為了乙個物件 可變引數 列表,字典,set 不可變引數 string,number,元組 全域性變數 宣告在函式外,...