1. 程式人生 > >淺談python中的字元編碼與轉碼

淺談python中的字元編碼與轉碼

ASCII碼
ASCII碼就是機器能識別的單位元組編碼系統,它是單位元組的。

Unicode編碼
Unicode編碼是一種統一碼、萬國碼、單一碼,它能編碼任何國家的語言,Unicode編碼不管英文還是中文最少都是佔兩個位元組。

UTF-8編碼
UTF-8編碼是從Unicode編碼上衍生出來的一種編碼,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是將所有的字元和符號進行分類:ascii碼中的內容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存。

GBK編碼
GBK編碼也是從Unicode編碼上衍生出來的一種編碼,是咱們大中華民族的專屬字元編碼集。

這裡寫圖片描述

從圖中我們可以看出,我們從一種編碼轉換成另一種編碼,例如:GBK轉UTF-8,首先得解碼(decode)成它們的始祖Unicode,然後再編碼(encode)成新的編碼。

舉例說明
python3的例子
這個例子是在python3環境中寫的,python3環境預設的字串編碼是unicode,所以我們的寫字串都是unicode編碼的,--coding:utf-8 --這個的意思是該.py檔案是utf-8 編碼的。

# -*-coding:utf-8 -*-
# Author:Morocco

s = "你好"
unicode_to_utf=s.encode("utf-8")#unicode編碼成utf-8
print(s.encode("utf-8").decode("utf-8"))

注意:
1、python3環境下如果不進行解碼成Unicode,它打印出來的是一個bytes型別的編碼方式,終端一般都是Unicode編碼方式,所以最後一定得加上.decode("utf-8") 轉成Unicode編碼。
2、預設編碼方式和--coding:utf-8 - 設定的檔案編碼方式不是同一個含義,預設的編碼方式只是指該python3環境中的字串編碼,這是我們不能設定的,而我們所能設定的編碼方式是檔案編碼方式,因為我們的檔案不僅有所謂的字串還有其他的程式碼。

python2.X例子
這裡直接引用的是

Python2.X中的編碼轉換
python3筆者認為是主流,把python3弄清楚就好。python2.X中的編碼方式有點不苟同,它預設的字串編碼是ASCII編碼,當我們指定檔案編碼為utf-8編碼時,字串編碼就變成了utf-8。但在python3中卻不是這樣的!!!因為你即使改變了它的檔案編碼方式,它的字串編碼還是Unicode編碼。