轉載https://www.cnblogs.com/hukey/p/9647291.html
1.編碼:
ascii碼: 不支持 中文 .python2使用的編碼是
支持,英文,數字,符號
8位一個字節
gbk編碼 國標:
支持: 中文,英文,數字,符號
英文16位
中文16位
unicode 萬國碼
支持:中文,英文,數字,符號
英文 32位,四個字節
中文 32位,四個字節
utf -8長度可變,的萬國碼最少用8位, python3使用的編碼
英文 8位 一個字符
中文 24位 三個字節
python3中程序運行階段使用的是uniconde碼,顯示的內容是bytes類型
傳輸和存儲使用的byes
pycharm 存儲使用的是utf8
1.編碼.
漢字,一個漢字utf-8是3個字節
舉例:
s = "中"
bs = s.encode("utf-8")
print(bs)
b'\xe4\xb8\xad
gbk,英文編碼是ascii原樣輸出,漢字,一個漢字gbk是2個字節
s = "alex"
bs = s.encode("gbk")
print(bs)
b'alex'
2.解碼,用什麼編的碼,就要用什麼來解碼
舉例:都使用utf-8來,騰訊qq微信發的其實都是這些碼,然後進行解碼
編碼:
s = "old廣坤"
bs = s.encode("utf-8")
print(bs)
解碼:
bs = b'old\xe5\xb9\xbf\ex5\x9d\xa4'
s = bs.decnde("utf-8")
print(s)
內存地址
字符編碼
這裏主要描述以下三種編碼方式:
(1)ASCII
(2)unicode
(3)uft-8
(4)gbk
ASCII 碼
在計算機內部,所有的信息最終都是一個二進制值。每一個二進制位(bit)有0和1兩種狀態,因此 8 個 二進制位就可以組合成 256 種狀態,這被稱爲一個字節(byte)。也就是說,一個字節一共可以用來表示 256種不同的狀態,每一個狀態對應一個符號,就是 256 個符號,從 00000000 到 11111111
美國定製了一套字符編碼,對英語字符與二進制位之間的關係,做了統一規定。這被稱爲 ASCII 碼,一直沿用至今。
一個字符用 1 個字節表示 1 byte = 8 bit
ASCII 碼只包含字母和英文中的特殊符號,不包括漢字;
unicode (萬國碼)
世界上存在很多種不同的編碼,同一個二進制數字可以被解釋成不同的符號。因此,想要打開一個文本文件,就必須知道它的編碼方式,否則用錯誤的編碼方式打開就會出現亂碼。如果有一種編碼,將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,那麼亂碼問題就會消失。這就是 unicode 萬國碼的由來,這是一種所有符號的編碼。
字母:
一個字母等於 4 個 byte = 32 bit
漢字:
一個字母等於 4 個 byte = 32 bit
1. unicode 的問題
需要注意的是, unicode 只是一個字符集,它規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲。
(1)如何才能區分 unicode 和 ASCII ? 計算機怎麼知道三個字節表示一個符號,而不是分別表示三個符號呢?
(2)英文在 ASCII 碼中,只需要一個字節表示就夠了,如果採用 unicode 統一規定,每個符號用三個或四個字符表示,這對於存儲來說是極大的浪費,文本文件的大小胡因此大出二三倍。
UTF-8
互聯網的普及,強烈要求出現一種統一的編碼方式。utf-8 就是在互聯網上使用最廣的一種 unicode 的實現方式。
字母:
一個字母等於 2 byte = 8 bit
漢字:
一箇中文等於 3 byte = 24 bit
GBK
包含全部中文字符,utf-8則包含全世界所有國家需要用到的字符;
字母:
一個字母 1 byte = 8 bit
漢字:
一個漢字 2 byte = 16 bit
=、==、is 三者的使用說明
1. = 賦值
例子:
1 2 |
|
2. == 比較值是否相等
1 2 3 4 |
|
3. is 比較內存地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|