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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章