成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三個一組還是四個一組?從 Bytes 到 Unicode 的字節(jié)劃分方法

開發(fā) 后端
大家在 Python 開發(fā)過程中,經(jīng)常會進行字符串encode為 Bytes型數(shù)據(jù),或者把 Bytes 型數(shù)據(jù) decode為字符串的操作。

[[421316]]

大家在 Python 開發(fā)過程中,經(jīng)常會進行字符串encode為 Bytes型數(shù)據(jù),或者把 Bytes 型數(shù)據(jù) decode為字符串的操作。例如:圖片我們知道,在 Unicode 編碼中,中文占3個字節(jié),所以一個中文字符編碼為 Bytes 型數(shù)據(jù)以后,會占用3個 Bytes 字符,例如:

  1. >>> a = '青'  
  2. >>> a.encode()  
  3. b'\xe9\x9d\x92'  
  4. >>> b = '青南'  
  5. >>> b.encode()  
  6. b'\xe9\x9d\x92\xe5\x8d\x97'  

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

所以,當我要把 Bytes 型數(shù)據(jù)\xe9\x9d\x92\xe5\x8d\x97 轉(zhuǎn)為字符串時,Python 會把\xe9\x9d\x92轉(zhuǎn)成青字,把\xe5\x8d\x97轉(zhuǎn)成南字,看起來,似乎是 Python 知道應(yīng)該把每3個 Bytes 符號一組來進行處理。

然而,Unicode 中,emoji 表情是4個字節(jié),例如表情符號:

??,它對應(yīng)的 Bytes 型數(shù)據(jù)為:

\xf0\x9f\xa4\x94,如下圖所示:

如果我把青??南轉(zhuǎn)換為 Bytes 型數(shù)據(jù),值為:

\xe9\x9d\x92\xf0\x9f\xa4\x94\xe5\x8d\x97,如下圖所示,一共10個 Bytes 字符:

那么問題來了,當我對這個 Bytes 型數(shù)據(jù)進行 decode 會怎么樣呢?如下圖所示:

Python 可以正確地把 Bytes 數(shù)據(jù)劃分為:

  1. \xe9\x9d\x92 對應(yīng)“青”  
  2. \xf0\x9f\xa4\x94 對應(yīng)“🤔”  
  3. \xe5\x8d\x97 對應(yīng)“南”  

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

  1. \xe9\x9d\x92  
  2. \xf0\x9f\xa4  
  3. \x94\xe5\x8d\x97  

實際上,這個問題的原因,只有當我們用二進制來看的時候,才能發(fā)現(xiàn)端倪。 青對應(yīng)的第一個 Bytes 字符\xe9,其中的e9是一個十六進制數(shù)字,把它轉(zhuǎn)成十進制是233,轉(zhuǎn)成二進制是11101001。 南對應(yīng)的第一個 Bytes 字符\xe5,其中的e5是一個十六進制數(shù)字,把它轉(zhuǎn)成十進制是229,轉(zhuǎn)成二進制是11100101。 ??對應(yīng)的第一個 Bytes 字符\xf0,其中的f0是一個十六進制數(shù)字,把它轉(zhuǎn)成十進制是240,轉(zhuǎn)成二進制是11110000。如果還看不出他們的差異,那我們把他們放在一起對比一下:

  1. 11101001  
  2. 11100101  
  3. 11110000  

看出差異了嗎?中文漢字是三個字節(jié),轉(zhuǎn)換為 Bytes 型數(shù)據(jù)以后,第一個字符對應(yīng)的二進制數(shù)是1110開頭。emoji 是4個字節(jié),轉(zhuǎn)換為 Bytes 型數(shù)據(jù)以后,第一個字符對應(yīng)的二進制數(shù)是1111開頭。所以,當給定一個 Bytes 型數(shù)據(jù)需要給 Python 來轉(zhuǎn)換為字符串的時候,Python 是這樣判斷應(yīng)該有幾個字符一組的。

 

  • 給定 Bytes 型數(shù)據(jù):\xe9\x9d\x92\xf0\x9f\xa4\x94\xe5\x8d\x97
  • 看第一個字符對應(yīng)的二進制數(shù)的高4位是1110,所以當前字符和它后面兩個字符(合計3個字符)一組,進行解析,得到青字。
  • 跳過已經(jīng)解析的字符,直接來到第四位\xf0,發(fā)現(xiàn)它對應(yīng)的二進制數(shù)高4位是1111,所以這個字符和接下來3個字符(合計4個字符)一組,解析出??。
  • 跳過已經(jīng)解析的字符,來到第8位\xe5,對應(yīng)的二進制高4位是1110,因此這個字符和接下來的兩個字符一組進行解析,得到南。
  • 完成。對于數(shù)字和英文字母,在 Unicode 里面只使用一個字節(jié)來表示,他們的 Ascii 碼小于128。而多字節(jié)的 Unicode 字符,都是從129開頭,所以英文字母數(shù)字與中文混合生成的 Bytes 型數(shù)據(jù),在解碼時也不會出現(xiàn)分組不明確的問題。

本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關(guān)推薦

2019-11-01 11:19:25

轉(zhuǎn)鏈表LeetCode代碼

2016-11-28 10:06:57

戴爾峰會

2012-03-06 10:13:14

諾基亞應(yīng)用商店運營商

2015-04-07 09:44:49

Android

2012-05-14 10:01:12

PaaS云計算平臺即服務(wù)

2019-09-03 08:57:52

Linux命令軟件

2019-10-28 11:18:23

戴爾

2019-07-26 07:02:05

TCP四次揮手網(wǎng)絡(luò)協(xié)議

2023-04-07 07:30:30

數(shù)據(jù)庫調(diào)研數(shù)據(jù)

2018-08-22 09:40:27

2012-12-26 10:34:56

CSSWeb前端

2023-09-15 07:33:25

數(shù)據(jù)庫選型評估

2019-04-23 14:52:26

2009-07-10 09:58:09

Chrome OS屏幕造假谷歌

2023-04-19 08:00:00

人工智能視覺語言模型

2018-05-07 15:23:51

2019-11-11 10:20:10

Linux重命名命令

2015-02-28 10:01:10

工信部FDD LTE4G

2009-09-15 09:13:29

Linux服務(wù)器僵尸網(wǎng)絡(luò)惡意軟件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产一区二区在线播放 | 全免费a级毛片免费看视频免费下 | 亚洲国产一区二区三区四区 | 国产一级特黄视频 | 蜜臀久久 | 99久久亚洲| 国产精品久久久久久久久久 | 亚洲美女网站 | 午夜欧美a级理论片915影院 | 欧美日韩一区二区三区不卡视频 | aaa精品| 99九九视频 | 玖草资源 | 午夜一级做a爰片久久毛片 精品综合 | 精品国产青草久久久久96 | 欧美中文一区 | 国产精品成人一区二区三区夜夜夜 | 欧美极品在线 | 在线免费观看毛片 | 国产精品久久久久久婷婷天堂 | 久久成人免费观看 | 国产 亚洲 网红 主播 | 精品久久一区 | 久久成人精品视频 | 久久久久免费观看 | 91视频官网 | av在线黄 | 日韩一区中文字幕 | 国产精品久久久久久久久久久久 | 国产欧美精品一区二区色综合朱莉 | www.天天操.com | 天啪 | 一级黄色片美国 | 午夜视频在线 | 久久精品99国产精品 | 国产精品福利在线观看 | 北条麻妃99精品青青久久 | 成人国产精品免费观看 | 精品国产一区二区三区久久 | 91精品国产91久久综合桃花 | 欧美天天视频 |