計算機里面,編碼方法有很多種,英文的一般用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