字符編碼

轉載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

s1 = 'hkey'

s2 = 'xiaofei'

 

2. ==  比較值是否相等

1

2

3

4

print1 == 2)

 

# 執行結果:

# False

 

3. is 比較內存地址

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

s1 = 6

s2 = 6

 

print(s1 is s2)

 

# 執行結果:

# True

 

s11 = 'adfadsasdfasdff'

s22 = 'adfadsasdfasdff1'

 

print(s11 is s22)

 

# 執行結果:

# False

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章