1. 程式人生 > >python中的內容編碼

python中的內容編碼

left margin and 數據類型 中文 網絡 chan 解碼 如果

一、python編碼簡介 

1)編碼格式簡介

python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ASCII),ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個字節),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號。顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode

  Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,註:此處說的的是最少2個字節,可能更多。

  UTF-8,是對Unicode編碼的壓縮和優化,不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存。所以,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(python3.x默認UTF-8)。

技術分享

a=""
# 查看a中的方法
print(dir(a))
# 顯示a的數據類型
print(type(a))
# 顯示a的碼值
print(ord(a))
# 26126
# 將碼值轉換成對應的字符
print(chr(26126))
#
a="明天"
# len-字符的長度
print(a.__len__()) # bytes的長度 print(a.encode("utf-8").__len__())

  在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8編碼。用記事本編輯的時候,從文件讀取的UTF-8字符被轉換為Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換為UTF-8保存到文件:

技術分享

  瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器,所以你看到很多網頁的源碼上會有類似<meta charset="UTF-8" />的信息,表示該網頁正是用的UTF-8編碼。

技術分享

2)byte

  由於Python的字符串類型是str,在內存中以Unicode表示,一個字符對應若幹個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str變為以字節為單位的bytes,bytes的每個字符都占有一個字節。反過來,如果我們從網絡或磁盤上讀取了字節流,那麽讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法:

# 編碼
a="ABC"
print(a.encode("utf-8"))
b="小明"
# 會報錯,中文超出了ascii範圍
# print(b.encode("ascii"))
print(b.encode("utf-8"))
# b‘\xe5\xb0\x8f\xe6\x98\x8e‘
# 解碼
print(b\xe5\xb0\x8f\xe6\x98\x8e.decode("utf-8"))
print(b"abc".decode("ascii"))

1個中文字符經過UTF-8編碼後通常會占用3個字節,而1個英文字符只占用1個字節。在操作字符串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

python中的內容編碼