python編碼encode和decode
阿新 • • 發佈:2018-12-27
計算機裡面,編碼方法有很多種,英文的一般用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