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

首頁 > 編程 > Python > 正文

Python3如何解決字符編碼問題詳解

2019-11-25 16:14:03
字體:
來源:轉載
供稿:網友

編碼

因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時采用8個比特(bit)作為一個字節(byte),所以,一個字節能表示的最大的整數就是255(二進制11111111=十進制255),如果要表示更大的整數,就必須用更多的字節。比如兩個字節可以表示的最大整數是65535,4個字節可以表示的最大整數是4294967295。

由于計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

Python3字符編碼

Python3 最重要的一項改進之一就是解決了 Python2 中字符串與字符編碼遺留下來的這個大坑。

Python2 字符串設計上的一些缺陷:

  • 使用 ASCII 碼作為默認編碼方式,對中文處理很不友好。
  • 把字符串的牽強地分為 unicode 和 str 兩種類型,誤導開發者

當然這并不算 Bug,只要處理的時候多留心也可以避免這些坑。但在 Python3 兩個問題都很好的解決了。

首先,Python3 把系統默認編碼設置為 UTF-8

>>> import sys>>> sys.getdefaultencoding()'utf-8'>>>

然后,文本字符和二進制數據區分得更清晰,分別用 str 和 bytes 表示。文本字符全部用 str 類型表示,str 能表示 Unicode 字符集中所有字符,而二進制字節數據用一種全新的數據類型,用 bytes 來表示。

str

>>> a = "a">>> a'a'>>> type(a)<class 'str'>>>> b = "禪">>> b'禪'>>> type(b)<class 'str'>

bytes

Python3 中,在字符引號前加‘b',明確表示這是一個 bytes 類型的對象,實際上它就是一組二進制字節序列組成的數據,bytes 類型可以是 ASCII范圍內的字符和其它十六進制形式的字符數據,但不能用中文等非ASCII字符表示。

>>> c = b'a'>>> cb'a'>>> type(c)<class 'bytes'>>>> d = b'/xe7/xa6/x85'>>> db'/xe7/xa6/x85'>>> type(d)<class 'bytes'>>>>>>> e = b'禪' File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.

bytes 類型提供的操作和 str 一樣,支持分片、索引、基本數值運算等操作。但是 str 與 bytes 類型的數據不能執行 + 操作,盡管在py2中是可行的。

>>> b"a"+b"c"b'ac'>>> b"a"*2b'aa'>>> b"abcdef/xd6"[1:]b'bcdef/xd6'>>> b"abcdef/xd6"[-1]214>>> b"a" + "b"Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: can't concat bytes to str

python2 與 python3 字節與字符的對應關系

python2 python3 表現 轉換 作用
str bytes 字節 encode 存儲
unicode str 字符 decode 顯示

encode 與 decode

str 與 bytes 之間的轉換可以用 encode 和從decode 方法。

encode 負責字符到字節的編碼轉換。默認使用 UTF-8 編碼準換。

>>> s = "Python之禪">>> s.encode()b'Python/xe4/xb9/x8b/xe7/xa6/x85'>>> s.encode("gbk")b'Python/xd6/xae/xec/xf8'

decode 負責字節到字符的解碼轉換,通用使用 UTF-8 編碼格式進行轉換。

>>> b'Python/xe4/xb9/x8b/xe7/xa6/x85'.decode()'Python之禪'>>> b'Python/xd6/xae/xec/xf8'.decode("gbk")'Python之禪'

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武清区| 乌拉特中旗| 景德镇市| 弥勒县| 沁源县| 剑河县| 梅州市| 红桥区| 康定县| 玛曲县| 鄂温| 女性| 林甸县| 高安市| 宁海县| 苍山县| 南昌县| 同仁县| 岳西县| 西安市| 喜德县| 通辽市| 江达县| 建宁县| 澜沧| 北碚区| 贡山| 巨鹿县| 新建县| 福安市| 香港 | 麦盖提县| 措勤县| 香港 | 昌江| 全椒县| 江山市| 河东区| 荔浦县| 莱阳市| 菏泽市|