国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

徹底搞懂Python字符編碼

2020-02-22 22:57:39
字體:
來源:轉載
供稿:網友

不論你是有著多年經驗的 Python 老司機還是剛入門 Python 不久,你一定遇到過UnicodeEncodeError、UnicodeDecodeError 錯誤,每當遇到錯誤我們就拿著 encode、decode 函數翻來覆去的轉換,有時試著試著問題就解決了,有時候怎么試都沒轍,只有借用 Google 大神幫忙,但似乎很少去關心問題的本質是什么,下次遇到類似的問題重蹈覆轍,那么你有沒有想過一次性徹底把 Python 字符編碼給搞懂呢?

完全理解字符編碼 與 Python 的淵源前,我們有必要把一些基礎概念弄清楚,雖然有些概念我們每天都在接觸甚至在使用它,但并不一定真正理解它。比如:字節、字符、字符集、字符碼、字符編碼。

字節

字節(Byte)是計算機中數據存儲的基本單元,一字節等于一個8位的比特,計算機中的所有數據,不論是保存在磁盤文件上的還是網絡上傳輸的數據(文字、圖片、視頻、音頻文件)都是由字節組成的。

字符

你正在閱讀的這篇文章就是由很多個字符(Character)構成的,字符一個信息單位,它是各種文字和符號的統稱,比如一個英文字母是一個字符,一個漢字是一個字符,一個標點符號也是一個字符。

字符集

字符集(Character Set)就是某個范圍內字符的集合,不同的字符集規定了字符的個數,比如 ASCII 字符集總共有128個字符,包含了英文字母、阿拉伯數字、標點符號和控制符。而 GB2312 字符集定義了7445個字符,包含了絕大部分漢字字符。

字符碼

字符碼(Code Point)指的是字符集中每個字符的數字編號,例如 ASCII 字符集用 0-127 連續的128個數字分別表示128個字符,例如 "A" 的字符碼編號就是65。

字符編碼

字符編碼(Character Encoding)是將字符集中的字符碼映射為字節流的一種具體實現方案,常見的字符編碼有 ASCII 編碼、UTF-8 編碼、GBK 編碼等。某種意義上來說,字符集與字符編碼有種對應關系,例如 ASCII 字符集對應 有 ASCII 編碼。ASCII 字符編碼規定使用單字節中低位的7個比特去編碼所有的字符。例如"A" 的編號是65,用單字節表示就是0×41,因此寫入存儲設備的時候就是b'01000001'。

編碼、解碼

編碼的過程是將字符轉換成字節流,解碼的過程是將字節流解析為字符。

理解了這些基本的術語概念后,我們就可以開始討論計算機的字符編碼的演進過程了。

從 ASCII 碼說起

說到字符編碼,要從計算機的誕生開始講起,計算機發明于美國,在英語世界里,常用字符非常有限,26個字母(大小寫)、10個數字、標點符號、控制符,這些字符在計算機中用一個字節的存儲空間來表示綽綽有余,因為一個字節相當于8個比特位,8個比特位可以表示256個符號。于是美國國家標準協會ANSI制定了一套字符編碼的標準叫 ASCII(American Standard Code for Information Interchange),每個字符都對應唯一的一個數字,比如字符 "A" 對應數字是65,"B" 對應 66,以此類推。最早 ASCII 只定義了128個字符編碼,包括96個文字和32個控制符號,一共128個字符只需要一個字節的7位就能表示所有的字符,因此 ASCII 只使用了一個字節的后7位,剩下最高位1比特被用作一些通訊系統的奇偶校驗。下圖就是 ASCII 碼字符編碼的十進制、二進制和字符的對應關系表

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南昌市| 彩票| 北安市| 红河县| 盐城市| 三江| 永福县| 天祝| 革吉县| 南皮县| 北京市| 中超| 内黄县| 邵阳市| 三明市| 连山| 海原县| 古丈县| 馆陶县| 乐亭县| 故城县| 于都县| 简阳市| 固阳县| 翁源县| 宝丰县| 永宁县| 宝坻区| 民丰县| 河北省| 浠水县| 祁阳县| 新疆| 白玉县| 清新县| 牟定县| 梅河口市| 安岳县| 东乡县| 武强县| 高雄县|