Python有哪幾種編碼方式?這幾類必須知道!
Python有哪幾種編碼方式?主要包含ASCII、GBK、Unicode與utf8幾類,接下來我們一起來認識一下!
ASCII表
眾所周知,計算機起源於美國,英文只有26個字元,算上其他所有特殊符號也不會超過128個。位元組是計算機的基本儲存單位,一個位元組(bytes)包括八個位元位(bit),能夠表示出256個二進位制數字,所以美國人在這裡只是用到了一個位元組的前七位即127個數字來對應了127個具體字元,而這張對應表就是ASCII碼字元編碼表,簡稱ASCII表。後來為了能夠讓計算機識別拉丁文,就將一個位元組的最高位也應用了,這樣就多擴充套件出128個二進位制數字來對應新的符號。這張對應表因為是在ASCII表的基礎上擴充套件的最高位,因此稱為擴充套件ASCII表。到此位置,一個位元組能表示的256個二進位制數字都有了特殊的符號對應。
GBK編碼
但是,當計算機發展到東亞國家後,問題又出現了,像中文,韓文,日文等符號也需要在計算機上顯示。可是一個位元組已經被西方國家佔滿了。於是,我中華民族自己重寫一張對應表,直接生猛地將擴充套件的第八位對應拉丁文全部刪掉,規定一個小於127的字元的意義與原來相同,即支援ASCII碼錶,但兩個大於127的字元連在一起時,就表示一個漢字,這樣就可以將幾千個漢字對應一個個二進位制數了。而這種編碼方式就是GB2312,也稱為中文擴充套件ASCII碼錶。再後來,我們為了對應更多的漢字規定只要第一個位元組是大於127就固定表示這是一個漢字的開始,不管後面跟的是不是擴充套件字符集裡的內容。這樣能多出幾萬個二進位制數字,就算甲骨文也能夠用了。而這次擴充套件的編碼方式稱為GBK標準。當然,GBK標準下,一個像”苑”這樣的中文符號,必須佔兩個位元組才能儲存顯示。
Unicode與utf8編碼
與此同時,其它國家也都開發出一套編碼方式,即本國文字元號和二進位制數字的對應表。而國家彼此間的編碼方式是互不支援的,這會導致很多問題。於是ISO國際化標準組織為了統一編碼,統計了世界上所有國家的字元,開發出了一張萬國碼字元表,用兩個位元組即六萬多個二進位制數字來對應。這就是Unicode編碼方式。這樣,每個國家都使用這套編碼方式就再也不會有計算機的編碼問題了。Unicode的編碼特點是對於任意一個字元,都需要兩個位元組來儲存。這對於美國人而言無異於吃上了世界的大鍋飯,也就是說,如果用ASCII碼錶,明明一個位元組就可以儲存的字元現在為了相容其他語言而需要兩個位元組了,比如字母I,本可以用01001001來儲存,現在要用Unicode只能是00000000 01001001儲存,而這將導致大量的空間被浪費掉。基於此,美國人建立了utf8編碼,而utf8編碼是一種針對Unicode的可變長字元編碼方式,根據具體不同的字元計算出需要的位元組,對於ASCII碼範圍的字元,就用一個位元組,而且符號與數字的對應也是一致的,所以說utf8是相容ASCII碼錶的。但是對於中文,一般是用三個位元組儲存的。
編碼和解碼區分:
s = "苑昊"
b1 = s.encode()
b2 = s.encode("GBK")
print(b1) # 預設utf8 : b'\xe8\x8b\x91\xe6\x98\x8a'
print(b2) # b'\xd4\xb7\xea\xbb'
print(b1.decode()) # 這裡如果用GBK解碼就會出現亂碼
print(b2.decode("GBK"))
print(type(b1)) #
print(type(b2)) #
Python 3 最重要的新特性大概要算是對文字和二進位制資料作了更為清晰的區分,不再會對bytes位元組串進行自動解碼。文字總是Unicode,由str型別表示,二進位制資料則由bytes型別表示。Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2775812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 這幾個python常用的庫你必須知道!Python
- IPTV系統有哪幾種運營方式?
- 關於人工智慧,必須知道這幾事情,歐能智慧人工智慧
- 學習Kali Linux必須知道的幾點Linux
- Linux程式間通訊有幾種方式?這8個你都知道嗎?Linux
- LLM部署,你必須要知道的幾個技巧!
- 域名解析它有哪幾種方式?
- Python資料儲存方式有幾種?如何使用?Python
- AOP 有幾種實現方式?
- JS高階之面試必須知道的幾個點JS面試
- 配音技巧 | 學配音必須要知道的幾個技巧
- 【基礎】這15種CSS居中的方式,你都用過哪幾種?CSS
- python 非同步的幾種方式Python非同步
- python的幾種輸出方式Python
- python的幾種輸入方式Python
- 不知道CC防護的看這裡,這種方式你必須學會!
- 智慧 |MES與裝置整合時有哪幾種握手方式
- 沉浸式空間場景的使用有哪幾種方式?
- GO和Python有什麼區別?這十點必須知道!GoPython
- 程式碼迭代的幾種方式
- 什麼是Python?Python語言支援哪幾種程式設計方式?Python程式設計
- Python 這10個字典操作你必須知道Python
- 自媒體實時熱點怎麼追?這幾個工具你必須知道!
- python接收郵件的幾種方式Python
- T面試題:程式間的通訊方式有哪幾種?面試題
- Centos Stream系統設定海外HTTP代理有哪幾種方式?CentOSHTTP
- Spring第二天,你必須知道容器註冊元件的幾種方式!學廢它吊打面試官!Spring元件面試
- C語言中你必須知道的幾大排序演算法C語言排序演算法
- 【網路安全】你必須知道的幾個網路安全概念
- 新手入門:入手MacBook 後必須知道的 幾 個小技巧?Mac
- Python直譯器有幾種Python
- Python運算子分為哪幾類?Python教程!Python
- JavaScript物件的建立方式有幾種?JavaScript物件
- docker 容器如何固定ip,有幾種方式Docker
- Python 傳送郵件的幾種方式Python
- SMT鋼網有哪幾種工藝?
- Redis有哪幾種資料淘汰策略?Redis
- 避免HBase PageFilter踩坑,這幾點你必須要清楚Filter