python中字符串的編碼和解碼


1. 常用的編碼

  • ASCII:只能表示一些字母,數字和特殊的字符,占一個字節
  • GBK:國家簡體中文字符集和繁體字符集,兼容ASCII,占兩個字節
  • Unicode:能夠表示全世界上所有的字符,Unicode有人說占4個字節也有人說占2個字節,但中文占2個字節
  • UTF-8:Unicode的壓縮版,占1~3個字節,其中中文占三個字節

2.補充:計算機表示的單位:

bit: 位,計算機最小的表示單位
bytes:字節,最小的存儲單位,1bytes=8bit,1bytes簡寫成1B
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
......

3.ASCII編碼

ASCII編碼是基於拉丁字母一套編碼,主要是顯示現代英語和其西歐語言,是最早通用的單字節編碼系統,具體ASCII對照表如下:

在對照表中需要記住的是大寫字母A的編碼是65,小寫字母a的編碼的97即可。
在python中可以使用chr和ord方法進行轉換:

# 將數字類型轉換成ASCII對應的字符
print(chr(97))  # a
# 將數字轉換成對應的數據
print(ord("A"))  # 65
# 或者使用

但隨着事件的發展,ASCII編碼擴展到了256個字符,編碼 對照表如下:

其中后128個字符稱為擴展ASCII碼

2.GBK和GB2312編碼

由於ASCII編碼只能由256個字符組成,然只能由1個字節來表示中文是不可能的,因此制定了GB2312編碼,用來表示中文的對照表

4.Unicode

為了解決各個國家編碼沖突的問題,Unicode編碼就因此而生,Unicode把所有語言都統一到一套編碼里面,就會避免沖突,產生亂碼。
Unicodeb標准在不斷發展,最常用的是用兩個字節表示一個字符,也有的字符是4個字節,但是中文是占兩個字節。如果統一成Unicode編碼,在存儲和傳輸上就不划算

5.UTF-8編碼

為了解決Unicode編碼存儲過大的問題,就推出了可變長編碼UTF-8,UTF-8編碼把一個Unicode字符依據不同的數據大小編程1~6個字節,其中中文就占3個字節

6.編碼和解碼

1.編碼操作

可以通過encode進行編碼,其中語法如下:

  • 對字符串進行ASCII編碼(只能轉換數字,英文字母和一些符號)
# 方式1: 通過bytes方法
bytes('a', 'ASCII')
# 方式2:  通過encode方法進行
'a'.encode('ASCII') 
  • 將字符串轉換成gbk編碼格式
# 方式1:  通過encode方法進行
print('你好'.encode('GBK'))  # 編碼之后的結果為:b'\xc4\xe3\xba\xc3'
# 方式2: 通過bytes類型
print(bytes('我愛你', 'GBK'))  # 編碼之后的結果為:b'\xce\xd2\xb0\xae\xc4\xe3'
  • 將字符串轉換成Unicode編碼格式
# 方式1:  通過encode方法進行
print('你好'.encode('unicode_escape'))  # 編碼之后的結果為:b'\\u4f60\\u597d'
# 方式2: 通過bytes類型
print(bytes('我愛你', 'unicode_escape'))  # 編碼之后的結果為:b'\\u6211\\u7231\\u4f60'
  • 將字符串轉換成UTF-8編碼格式
# 方式1:  通過encode方法進行
print('你好'.encode('utf-8'))  # 編碼之后的結果為:b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 方式2: 通過bytes類型
print(bytes('我愛你', 'utf-8'))  # 編碼之后的結果為:b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'

2.解碼操作

  • 將GBK編碼格式轉換成字符串
# 通過decode方法解碼
print(b'\xc4\xe3\xba\xc3\xce\xd2\xb0\xae\xc4\xe3'.decode('GBK'))  # 解碼之后結果為:你好我愛你
  • 將UTF-8編碼格式轉換成字符串
# 通過decode方法解碼
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'.decode('utf-8'))  # 解碼之后結果為:你好我愛你
  • 將Uniconde編碼格式轉換成字符串
# 通過decode方法解碼
print(b'\\u4f60\\u597d\\u6211\\u7231\\u4f60'.decode('GBK'))  # 解碼之后結果為:你好我愛你


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM