程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python技能樹共建】字符編碼與解碼

編輯:Python

Python 字符編碼與解碼是什麼

在 Python3 中字符默認編碼是 Unicode 字符,而編碼指的是將字符轉換成字節流,解碼是相反的操作。
在正式開始前,我們還需要梳理一些基本概念
Python 中的字符串
計算機中 8 比特(bit)等於一個字節(byte),8 比特就是 8 位,即一個字節能表示的最大整數是 255(1111 1111)。
如果希望擴大整數范圍,需要用到更多的字節,例如 2 個字節就可以表示 65535,4 個字節就能表示 4294967295。
基於上述原理出現了各種編碼格式,例如 ASCII 可以表示 256 個字符,但僅支持英文字母,數字和少部分符號,中文的范圍要大很多,所以出現了 GB2312 編碼(後來升級到了 GBK 編碼),可以容納 6763 個漢字,但放眼世界還不夠,還需要更多的字符。
此時 Unicode 字符集就出現了,它將所有的語言都容納在一起,後續為了在存儲和傳輸數據時節省空間,出現了 UTF8 編碼。

怎麼用

Python 編碼基本使用

通過 ord() 函數獲取字符的整數表示,通過 chr() 將整數轉換為字符,例如下述代碼
print(ord('爬')) # 29228
print(chr(29228))

既然知道數字可以轉換為數字,那十進制和十六進制的數字都可以。
例如 29228 = 722c,所以 \u722c
print(chr(int('722c', 16)))

也可以使用 Unicode 轉碼工具進行轉換。

Python 編碼和解碼函數

encode() 和 decode() 分別對應編碼和解碼函數,en 是編碼,de 是解碼。
my_b = '技能樹'.encode('utf-8')
print('編碼後',my_b) # 編碼後 b'\xe6\x8a\x80\xe8\x83\xbd\xe6\xa0\x91'

解碼操作如下所示:
my_b = '技能樹'.encode('utf-8')
print('編碼後', my_b) # 編碼後 b'\xe6\x8a\x80\xe8\x83\xbd\xe6\xa0\x91'

my_str = my_b.decode('utf-8')
print("解碼後", my_str)

需要注意編碼後輸出的內容與字符串類似,就是前面有一個前綴 b

亂碼

如果編碼和解碼方法不一致,就會出現亂碼問題,例如下述代碼
my_b = '技能樹'.encode('gbk')
print('編碼後', my_b) # 編碼後 b'\xbc\xbc\xc4\xdc\xca\xf7'

my_str = my_b.decode('utf-8')
print("解碼後", my_str)

出錯信息如下所示:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 0: invalid start byte

當出現上述類型的錯誤時,需要做的就是尋找到正確的原編碼,然後進行處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved