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

Python - 字符串編解碼

編輯:Python

文章目錄

    • 關於編解碼
      • 編碼的種類
    • 代碼實現編解碼
      • 常用字符串--字節轉換
      • 字節樣式字符串 編解碼
      • url 編解碼
      • 字節相加


關於編解碼

編碼/解碼本質上是一種映射
字符a 用 ascii 編碼則是65,計算機中存儲為 00110101。
a 需要解碼為 00110101,才能被計算機使用。

編碼:真實字符與二進制串的對應關系,真實字符 → 二進制串
解碼:二進制串與真實字符的對應關系,二進制串 → 真實字符

如:
UTF-8 --> decode 解碼 --> Unicode
Unicode --> encode 編碼 --> GBK / UTF-8 等


編碼的種類

  • ASCII 占 1個字節,只支持英文
  • GB2312 占2個字節,支持 6700+ 漢字
  • GBK GB2312的升級版,支持 21000+ 漢字,中文2個字節。
  • Unicode 2-4 字節, 已經收錄 136690 個字符
  • UTF-8:使用 1、2、3、4 個字節表示所有字符;
    優先使用1個字符、無法滿足則使增加一個字節,最多 4個字節。
    英文占1個字節、歐洲語系占2個、東亞占 3個,其它及特殊字符占 4個,中文 3個字節。
  • UTF-16:使用2、4個字節表示所有字符;
    優先使用2個字節,否則使用4個字節表示。

ASCII 以 1字節 8個bit位表示一個字符,首位全是0,表示的字符集明顯不夠

unicode 編碼系統是為表達任意語言而設計的,為了防止存儲上的冗余(比如,對應ascii碼的部分),其采用了變長編碼,但變長編碼給解碼帶來了困難,無法判斷是幾個字節表示一個字符

UTF-8 是針對unicode變長編碼設計的一種前綴嗎,根據前綴可判斷是幾個字節表示一個字符


Python 中的默認編碼

  • Python2 中默認是ASCII碼
  • Python3 中默認是unicode

代碼實現編解碼


常用字符串–字節轉換

str = '你好' # b'\xe4\xbd\xa0\xe5\xa5\xbd' gbk:b'\xc4\xe3\xba\xc3'
str = 'abc' # b'abc'
str = 'นั่ง' # b'\xe0\xb8\x99\xe0\xb8\xb1\xe0\xb9\x88\xe0\xb8\x87'
str = 'นั่' # b'\xe0\xb8\x99\xe0\xb8\xb1\xe0\xb9\x88'
# str = 2 # 'int' object has no attribute 'encode'
str = '*' # b'*'
a = str.encode('UTF-8')
a = str.encode('gbk')
print(a)
print(type(a)) # <class 'bytes'>

字節樣式字符串 編解碼

主要在於使用 raw_unicode_escape 編碼

str = '\xe5\x90\x8d\xe7\xa7\xb0'
str_b = str.encode("raw_unicode_escape") # b'\xe5\x90\x8d\xe7\xa7\xb0'
str_origin = str_b.decode("utf-8") # '名稱'

url 編解碼

使用 urllib 庫
參考: https://www.cnblogs.com/miaoxiaochao/p/13705936.html


str = '你好'
a = urllib.parse.quote(str)
print(a) # %E4%BD%A0%E5%A5%BD
b = urllib.parse.unquote(a) # 你好

字節相加

b = b''
b += b'a'
b += b' b'
print(b) b'a b'
print (b.decode('utf-8')) # a b

伊織 2022-06-24(五)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved