python3.x的字符編碼的轉換

首先須要說的是python3的默認編碼是Unicode,在pycharm中只是用utf-8去解釋,實際的編碼仍是Unicodepython

a = "某gbk編碼格式"windows

a.decode("gbk").encode("utf-8")網絡

#先用gbk方式解碼成unicode,再轉換成utf-8函數

python 3中最重要的新特性可能就是將文本(text)和二進制數據作了更清晰的區分。文本老是用unicode進行編碼,以str類型表示;而二進制數據以bytes類型表示。
在python3中,不能以任何隱式方式將str和bytes類型兩者混合使用。不能夠將str和bytes類型進行拼接,不能在str中搜索bytes數據(反之亦然),也不能將str做爲參數傳入須要bytes類型參數的函數(反之亦然)。
字符串和字節符之間劃分界線是必然的。上面這個圖解要牢記於心:
strings能夠被編碼(encode)成字bytes,bytes也能夠解碼(decode)成strings:
 
1
2
3
4
>>> '€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'
 
能夠這樣理解:
string是文本(text)的抽象表示。字符串(string)由字符組成,字符也是抽象的實體且與任何二進制表示無關。
當操縱字符串的時候,不少細節是不用瞭解的。咱們能夠分割、切片和拼接字符串,在字符串內部進行搜索。但並不在意內部是如何表示的,也不用在乎底層一個字符要花費多少byte。
只有在須要將string編碼(encode)成byte的時候,好比:經過網絡傳輸數據;或者須要將byte解碼(decode)成string的時候,咱們纔會關注string和byte的區別。
 
傳入encode和decode的參數是編碼方式。編碼是一種用二進制數據表示抽象字符的方式。目前有不少種編碼。上面給出的UTF-8是其中一種,下面是另外一種:
 
1
2
3
4
>>> '€20'.encode('iso-8859-15')
b'\xa420'
>>> b'\xa420'.decode('iso-8859-15')
'€20'
 
編碼是這個轉換過程當中相當重要的一部分。若不編碼,bytes對象b'\xa420'只是一堆比特位而已。編碼賦予其含義。採用不一樣的編碼,這堆比特位的含義就會大不一樣:
 
1
2
>>> b'\xa420'.decode('windows-1255')
'₪20'
相關文章
相關標籤/搜索