關於python的編解碼(decode, encode)

總結總結,本文僅適用於python2.xpython

默認編碼與開頭聲明

首先是開頭的地方聲明編碼windows

# coding: utf8運維

這個東西的用處是聲明文件編碼爲utf8(要寫在前兩行內),否則文件裏若是有中文,好比編碼

a = '美麗'
b = u'美麗'

中任何一種,運行前就會提示你SyntaxError,Non-ASCII character... 之類,由於python2.x的文件編碼默認使用萬惡的ascii
開頭加上那句默認編碼聲明就會變成utf8,獲取當前的默認編碼code

sys.getdefaultencoding()

unicode與utf8

在python中,使用unicode類型做爲編碼的基礎類型,編解碼要以其爲中間形式過渡,即進行strunicode之間的轉換。
解碼而後再編碼的過程,即str->unicode->str的過程。中間獲得的叫作unicode對象對象

這裏須要強調的是unicode是一種字符編碼方法,是 「與存儲無關的表示」,而utf8是一種以unicode進行編碼的計算機二進制表示,或者說傳輸規範。gbkgb2312gb18030, utf8等屬於不一樣的字符集,轉換編碼就是在它們中的任意二者間進行。utf-8

具體過程

具體的轉換,好比直接將一個字符串encode成另外一種字符集表示,注意此處是字符串,即typestr的,引號前沒有加u前綴的ci

# coding: utf8

s='美麗'
s.encode('gbk')

則實際上會先以默認編碼進行decode,即decode('ascii'),開頭聲明瞭utf8,s的編碼就是utf8,ascii解碼不了utf8的字符會報錯。那就改默認編碼,unicode

# coding: utf8
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

s='美麗'
s.encode('gbk')

這樣把默認編碼改爲utf8,decode的時候就以默認編碼utf8來進行,可以成功運行字符串

或者decode時指定類型,

# coding: utf8
import sys

s='美麗'
s.decode('utf8').encode('gbk')

對於typeunicode的,即加了u前綴的字符串,如上所說,直接encode便可

# coding: utf8
import sys

s = u'美麗'
s.encode('gbk')

控制檯的編碼

這又是另外一個讓人困惑的地方——控制檯的編碼致使的亂碼問題甚至是報錯。通常我的用的電腦上控制檯基本上都是utf8編碼的,但運維的機器上基本全是ascii,print中文的時候就會有酸爽的問題。亂碼問題通常發生在windows下面,由於那個編碼的字符集很不同凡響。因此當以正確方式編解碼之後,仍是出現問題,那問題極可能就出在控制檯上了

相關文章
相關標籤/搜索