字元串在Python内部的表示是unicode編碼,是以,在做編碼轉換時,通常需要以unicode作為中間編碼,即先将其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
decode的作用是将其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示将gb2312編碼的字元串str1轉換成unicode編碼。
encode的作用是将unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示将unicode編碼的字元串str2轉換成gb2312編碼。
是以,轉碼的時候一定要先搞明白,字元串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼。
轉碼的時候不禁要看代碼本身的編碼、檔案的編碼,還要看控制台的編碼,這就是為什麼同樣是一段代碼,在不同的系統(編碼不同的)中會出現亂碼的原因,如:
我的eclipse裡面代碼為utf-8編碼的。然後我這樣寫代碼
s="你好"
s=s.decode('gb2312').encode('utf-8')
print s
報錯:
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
原因:因為我的檔案為UTF-8編碼的。是以你想用gb2312将其轉成unicode是不可能的。
是以正确的寫法應當是:
s="你好"
print s
s=s.decode('utf-8').encode('utf-8') 要用UTF-8來做編碼
print s
發現列印出來的是亂碼那隻能說明一件事情就是我的eclipse控制台是GB2312的編碼!