1. 程式人生 > >Python 基本資料型別之【編碼問題】

Python 基本資料型別之【編碼問題】

content

  • 字符集
  • 常見的字符集舉例
  • 位元組和字串之間的轉換

編碼問題

1. 字符集

a="A"
a=b"A"
# 計算機中儲存只是0101二進位制程式碼
# 字符集: 一堆字元的集合,用來制定當前的字元對映成計算機中儲存的ascii規則

2. 常見的字符集舉例

(1) ascii碼
# 只採用8個數據位來進行編碼
# a-97
# b-98
(2) gb2312 簡體中文編碼集
# 使用兩個位元組儲存
# 所有的字符集對於原有ascii中已有字元都遵從ascii碼字符集
# big5臺灣
# GBK 中文、韓文、日文 亞洲
(3) unicode編碼集
# 將所有語言都統一到一套編碼裡。
# 定長儲存:浪費資源,訪問傳輸速度快
# 漢字2-4個位元組儲存
(4) utf-8編碼
# 變長儲存:省資源
# 漢字3個位元組 ,英文字母就只使用1個位元組

# 字串
# 位元組
# 在python中
# 字串支援字符集unicode
# 位元組的字符集ascii
# a="我愛中國"
# b=b""
(5) unicode和utf-8
1) unicode的顯示
a="中"
# ord()返回物件對應的整數儲存
print(ord(a))
# 20013

# chr() 將整數儲存轉換成字元
print(chr(20013)) # 中 # 十六進位制 print(hex(20013)) #0x4e2d \u4e2d # 0x4e2d print("\u4e2d") # 中
2) utf-8字符集顯示
# 使用字串下encode方法
a="中"
print(a.encode())

# unicode二進位制
print(bin(20013))  
#0b100111000101101

# utf-8二進位制
print(bin(0xe4),bin(0xb8),bin(0xad),sep="")  
# 111001000b101110000b10101101

#        10011100  0101101
# 111001001011100010101101
3) 關係
# unicode字符集和utf-8字符集二進位制編碼有一部分是重複的
4) 儲存
# 在計算機中記憶體統一使用unicode編碼集,當需要儲存到硬碟,做傳輸的時候,轉換成utf-8的模式。
# 瀏覽網頁的時候,伺服器把動態生成的unicode內容轉換成utf-8字符集傳輸到瀏覽器。
 
# 記憶體 、io、控制器、計算處理器、磁碟

3. 位元組和字串之間的轉換

# 字串轉換成位元組   編碼  字串.encode
# 位元組轉換成字串   解碼  位元組.decode
s="我愛你中國123"
# encoding: 指定字符集,預設是utf-8
print(s.encode())
print(s.encode("gbk"))
# b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd123'
# b'\xce\xd2\xb0\xae\xc4\xe3\xd6\xd0\xb9\xfa123'

b=b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd123'
print(b.decode())
# 我愛你中國123

print(b.decode("gbk"))
# UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 14: illegal multibyte sequence