91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Bytes型數據decode時是為什么要把幾位數據組合在一起的

發布時間:2021-12-21 09:40:13 來源:億速云 閱讀:150 作者:柒染 欄目:大數據

本篇文章為大家展示了Bytes型數據decode時是為什么要把幾位數據組合在一起的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。


 

大家在開發 Python 的過程中,經常會進行字符串encode為 Bytes型數據,或者把 Bytes 型數據 decode為字符串的操作。例如:

Bytes型數據decode時是為什么要把幾位數據組合在一起的  

我們知道,在 Unicode 編碼中,中文占3個字節,所以一個中文字符編碼為 Bytes 型數據以后,會占用3個 Bytes 字符,例如:

>>> a = '青'
>>> a.encode()
b'\xe9\x9d\x92'
>>> b = '青南'
>>> b.encode()
b'\xe9\x9d\x92\xe5\x8d\x97'
 

注意這里的\xe9需要作為整體來看待,表示一個16進制數。

所以,當我要把 Bytes 型數據\xe9\x9d\x92\xe5\x8d\x97 轉為字符串時,Python 會把\xe9\x9d\x92轉成字,把\xe5\x8d\x97轉成字,看起來,似乎是 Python 知道應該把每3個 Bytes 符號一組來進行處理。

然而,Unicode 中,emoji 表情是4個字節,例如表情符號:????,它對應的 Bytes 型數據為:\xf0\x9f\xa4\x94,如下圖所示:

Bytes型數據decode時是為什么要把幾位數據組合在一起的  

如果我把青????南轉換為 Bytes 型數據,值為:\xe9\x9d\x92\xf0\x9f\xa4\x94\xe5\x8d\x97,如下圖所示,一共10個 Bytes 字符:

Bytes型數據decode時是為什么要把幾位數據組合在一起的  

那么問題來了,當我對這個 Bytes 型數據進行 decode 的時候會怎么樣呢?如下圖所示:

Bytes型數據decode時是為什么要把幾位數據組合在一起的  

Python 可以正確地把 Bytes 數據劃分為:

\xe9\x9d\x92   對應“青”
\xf0\x9f\xa4\x94  對應“????”
\xe5\x8d\x97   對應“南”
 

為什么 Python 知道要把\xf0\x9f\xa4\x94這4個符號分到一組?為什么不會像下面這樣分組?

\xe9\x9d\x92
\xf0\x9f\xa4
\x94\xe5\x8d\x97
 

實際上,這個問題的原因,只有當我們用二進制來看的時候,才能發現端倪。

對應的第一個 Bytes 字符\xe9,其中的e9是一個十六進制數字,把它轉成十進制是233,轉成二進制是11101001

對應的第一個 Bytes 字符\xe5,其中的e5是一個十六進制數字,把它轉成十進制是229,轉成二進制是11100101

????對應的第一個 Bytes 字符\xf0,其中的f0是一個十六進制數字,把它轉成十進制是240,轉成二進制是11110000

如果還看不出他們的差異,那我們把他們放在一起對比一下:

11101001
11100101
11110000
 

看出差異了嗎?中文漢字是三個字節,轉換為 Bytes 型數據以后,第一個字符對應的二進制數是1110開頭。emoji 是4個字節,轉換為 Bytes 型數據以后,第一個字符對應的二進制數是1111開頭。

所以,當給定一個 Bytes 型數據需要給 Python 來轉換為字符串的時候,Python 是這樣判斷應該有幾個字符一組的。

  1. 給定 Bytes 型數據:     \xe9\x9d\x92\xf0\x9f\xa4\x94\xe5\x8d\x97
  2. 看第一個字符對應的二進制數的高4位是1110,所以當前字符和它后面兩個字符(合計3個字符)一組,進行解析,得到     字。
  3. 跳過已經解析的字符,直接來到第四位     \xf0,發現它對應的二進制數高4位是1111,所以這個字符和接下來3個字符(合計4個字符)一組,解析出     ????
  4. 跳過已經解析的字符,來到第8位     \xe5,對應的二進制高4位是1110,因此這個字符和接下來的兩個字符一組進行解析,得到    
  5. 完成。

對于數字和英文字母,在 Unicode 里面只使用一個字節來表示,他們的 Ascii 碼小于128。而多字節的 Unicode 字符,都是從129開頭的,所以英文字母數字與中文混合生成的 Bytes 型數據,在解碼的時候也不會出現分組不明確的問題。

上述內容就是Bytes型數據decode時是為什么要把幾位數據組合在一起的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲沃县| 旅游| 德州市| 奉化市| 黎城县| 泰来县| 甘谷县| 延津县| 朝阳区| 德州市| 英吉沙县| 武宣县| 额尔古纳市| 泸州市| 永年县| 大新县| 楚雄市| 峨山| 乌拉特中旗| 南阳市| 常德市| 福贡县| 金昌市| 五原县| 昌图县| 邢台市| 油尖旺区| 左贡县| 防城港市| 海阳市| 新乐市| 图木舒克市| 云龙县| 苍南县| 米泉市| 许昌县| 柳林县| 遵义市| 利津县| 荔浦县| 大连市|