微信公衆號:碼農充電站pro
我的主頁:https://codeshellme.github.iohtml
當你選擇了一種語言,意味着你還選擇了一組技術、一個社區。
—— Joshua Blochpython
目錄git
編碼github
信息
從一種形式轉換
到另外一種形式的過程,就叫作編碼
。說白了,編碼就是信息的一種轉換過程。shell
好比,信息的加密解密
,這就是信息的一種轉換過程,它是信息的明文與密文之間的轉換過程。微信
還有不一樣國家文字的翻譯,這是語言之間的一種轉換過程。網絡
那麼,編碼
也是一種信息的轉換過程。函數
計算機編碼編碼
計算機編碼
是信息的人類可讀
形式與計算機可讀
形式之間的一種轉換過程。加密
實際上,計算機是一種人造的,很「笨
」的機器,它只認識0
和1
這樣的二進制數據
,也稱爲機器碼
。
提示:計算機優點在於它的計算速度很快。
那麼,計算機要想可以存儲/展示
咱們人類可讀的,豐富多彩的信息(好比文字,圖片,音頻,視頻等),這就涉及到了計算機編碼
。
ASCII 碼
ASCII 碼
(美國信息交換標準碼),是最先的,也是較爲簡單的一種計算機編碼。其主要用於表示英文字符,數字和一些標點符號。
好比,二進制數字01000001
(十進制爲65
)就表示大寫字母A
。
GB2312
ASCII 碼
雖能表示英文,可是沒法表示其它語言,好比中文,韓文等。
爲了表示中文,中國國家標準總局
發佈了GB2312
(信息交換用漢字編碼字符集),專門用於表示中文信息。
好比,十六進制D6D0
表示漢字中
。
Unicode 碼
世界上有不少的國家,每一個國家都須要表示本身的文字,這就有了各類各樣的計算機編碼。每一個國家都有本身的編碼,這就不方便統一,也沒有通用性。
爲了統一不一樣國家的編碼,表示不一樣國家的文字,誕生了Unicode 碼
,俗稱萬國碼
。Unicode 碼
爲每種語言中的每一個字符設定了統一且惟一的二進制編碼。
好比,十六進制4E2D
表示漢字中
。
UTF8
Unicode 碼
其實是一個字符集
,它只規定了二進制
與各個字符
之間的對應關係,並無規定如何在磁盤上存儲(用幾個字節
來表示)。
提示:
字節
是計算機存儲的最小單位
1024 字節爲1 K
1024 K 爲1 M
1024 M 爲1 G
UTF32
是Unicode 碼
的一種實現,通常用4
個字節表示一個字符,這樣比較浪費存儲空間。由於,一個英文字符只用1
個字節就可表示,一個經常使用漢字用2
個字節就可表示。
爲了節省存儲空間,UTF8
通常用1 到4
個字節表示一個字符,好比英文字符用1
個字節,經常使用漢字用2
個字節。
注意:
UTF8
是Unicode 碼
的一種實現,比較經常使用。UTF8
使用變長
字節來表示字符,意思就是,使用的字節數
是可變的。
在Python2.x
中,Python 源代碼文件默認以ASCII 碼
格式編碼。所以,在Python2.x
中,默認狀況下,是不支持中文的。若是強制寫中文,則會出現如下錯誤:
SyntaxError: Non-ASCII character ...
若是想在Python2.x
源代碼文件中輸入中文字符,可使用UTF8
編碼,須要在代碼文件的開頭添加:
# -*- coding: UTF-8 -*-
或者:
# coding=utf-8
在Python3.x
中,Python 源代碼文件會統一採用Unicode
編碼,默認以UTF8
格式編碼,就不須要在代碼開頭添加上面的代碼。
str
類型
上一節介紹了Python 字符串的相關操做,這裏咱們介紹一下Python 字符串與編碼。
Python3
中的字符串
類型<class 'str'>
統一採用Unicode
編碼,所以支持多種語言。
>>> print('中文') # 中文 中文 >>> >>> print('english') # 英文 english
bytes
類型
當str
類型須要磁盤存儲
或者網絡傳輸
時,就須要轉換爲bytes
類型。
bytes
是一個二進制類型,它須要在str
以前加上b
:
>>> type(b'abc') <class 'bytes'>
bytes
中只能包含ASCII
字符,如有非ASCII
字符,則會報錯:
>>> s = b'中國' File "<stdin>", line 1 SyntaxError: bytes can only contain ASCII literal characters.
str
轉爲 bytes
str
類型轉換爲bytes
類型,須要使用str
中的encode
方法,參數utf8
是編碼格式:
>>> s = '中國' >>> s.encode('utf8') b'\xe4\xb8\xad\xe5\x9b\xbd'
bytes
轉爲 str
bytes
類型轉換爲str
類型,須要使用bytes
中的decode
方法,參數utf8
是編碼格式:
>>> s = b'\xe4\xb8\xad\xe5\x9b\xbd' >>> s.decode('utf8') '中國'
注意:當
str
類型與bytes
類型互轉時,推薦使用UTF8
編碼
str
與Unicode
互轉
將str
轉換爲Unicode
:
>>> '中國'.encode('unicode-escape') b'\\u4e2d\\u56fd'
將Unicode
轉換爲str
:
>>> b'\\u4e2d\\u56fd'.decode('unicode-escape') '中國'
ord()
與 chr()
ord()
函數用於獲取一個字符的十進制整數表示,chr()
是 ord()
的反操做:
>>> ord('a') 97 >>> chr(97) 'a' >>> ord('中') 20013 >>> chr(20013) '中'
(完。)
推薦閱讀:
Python 簡明教程 --- 4,Python 變量與基本數據類型
Python 簡明教程 --- 5,Python 表達式與運算符
Python 簡明教程 --- 8,Python 字符串函數
歡迎關注做者公衆號,獲取更多技術乾貨。