字符編碼


參考文章:廖雪峯字符串和編碼

# 注意:在打印二進制表示時前面的0都會去掉
# 編碼問題 ,b表示bytes(最前面的0去掉),\x表示16進制
# UTF-8是這樣作的:
# 1. 單字節的字符,字節的第一位設爲0,對於ascii字符,UTF-8碼只佔用一個字節,和ASCII碼徹底相同;
#
# 2. n個字節的字符(n>1),第一個字節的前n位設爲1,第n+1位設爲0,後面字節的前兩位都設爲10,這n個字節的其他空位填充該字符unicode碼,高位用0補足。
# 這裏有一個很大的問題,bin只是將數字轉爲二進制,unicode是2字節,內存中是unicode保存,
# ord是返回字符在unicode的位置,好比空格" "的位置是32,bin(32)就是0b100000,這樣就省略了10個0,可是在打印時最前面的0會所有去掉
# 網絡傳輸,讀文件是以bytes流傳輸
# gbk和gb2312是兩個字節
# 具體例子以下:
 1 a = " "
 2 print(bin(ord(a.encode())))       # 0b100000     # 最前面的10個0去掉
 3 print(bin(ord(a)))                # 0b100000
 4 print(ord(a))                     # 32
 5 a = "~"
 6 print(bin(ord(a.encode())))       # 0b1111110    # 最前面的9個0去掉
 7 print(bin(ord(a)))
 8 print(ord(a))                     # 126
 9 
10 a = "ab"
11 print(a.encode())       # b'ab'   # bytes
12 a = str("ab")
13 print(a.encode())       # b'ab'   # bytes     其二進制表示能夠查ascii表
14 a = ""
15 print(a.encode())       # b'\xe6\x88\x91'
16 print(ord(a))           # 25105         # """ Return the Unicode code point for a one-character string. """
17 print(bin(ord(a)))      # 0b 1100010 00010001
18 print(bin(25105))       # 0b 1100010 00010001     # 返回的應該是unicode編碼  ,最前面的一個0去掉了0b 01100010 00010001
19 for i in a.encode():
20     print(i)            # 230            136            145
21     print(bin(i))       # 0b11100110     0b10001000     0b10010001    則unicode編碼爲 0110 001000 010001
22 
23 a = ""
24 print(a.encode(encoding='gbk'))     # b'\xce\xd2'
25 
31 
32 print("".encode("gbk"))        # b'\xce\xd2'
33 for i in "".encode(encoding='gbk'):
34     print(i)                    # 206               210
35     print(bin(i))               # 0b11001110        0b11010010
36 
37 print("######")
38 print("".encode("gb2312"))  # b'\xce\xd2'
39 for i in "".encode("gb2312"):
40     print(i)                    # 206               210
41     print(bin(i))               # 0b11001110        0b11010010
42 
43 print("#############")
44 # print(str("我".encode().decode()))
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息