1. 程式人生 > >python編碼encode和decode

python編碼encode和decode

計算機裡面,編碼方法有很多種,英文的一般用ascii,而中文有unicode,utf-8,gbk,utf-16等等。

unicode是 utf-8,gbk,utf-16這些的父編碼,這些子編碼都能轉換成unicode編碼,然後轉化成子編碼,例如utf8可以轉成unicode,再轉gbk,但不能直接從utf8轉gbk

所以,python中就有兩個方法用來解碼(decode)與編碼(encode),解碼是子編碼轉unicode,編碼就是unicode轉子編碼

1.編碼

#encoding=utf-8
c=u'\u5f00\u59cb\u6267\u884c\u66f4\u65b0\u547d\u4ee4'
print c
print c.encode('utf8') print c.encode('gbk')

在這裡,檔案的編碼方式為utf8,控制檯的編碼方式是utf8
變數c是一個unicode編碼的字串(需要在引號前面加u)

輸出的結果為:

開始執行更新命令
開始執行更新命令
��ʼִ�и�������

因為控制檯是utf8編碼,所以unicode編碼和utf8編碼都能識別,但是gbk就不可以了
2.解碼

#encoding=utf-8
a = '中文'
print a.decode('g')
print [a.decode('g')]

這裡a為utf8編碼,decode方法將utf8解碼為unicode編碼
輸出結果:

中文
[u'\u4e2d\u6587']

由於控制檯能識別unicode編碼,所以需要把字串放在列表裡面才能看到unicode原始碼

#encoding=utf-8
a = '中文'
print [a.decode('gbk')]

因為a是utf8編碼的,如果將a用gbk解碼,程式就會報錯

UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

 

 

a = '中文'
print a.decode('utf-16')

如果用utf-16解碼方法解碼utf-8的字串,程式並不會報錯(可能因為它們的編碼方式相似),但是返回的是亂碼:

룤螖

 

 

如果一個字串為unicode碼,又沒有u標識,可以這樣來轉換成中文

a='\u8054\u76df\u533a'
b="u'%s'"%a

print eval(b)

 

 

後記

1.如果想知道一個字串是什麼編碼,可以print [字串] 來看二進位制碼 

[u'\u76ee\u6807\u533a\u670d']
['\xe7\x9b\xae\xe6\xa0\x87\xe5\x8c\xba\xe6\x9c\x8d']

第一個是unicode,第二個是utf-8