1. 程式人生 > >python報錯"utf-8 codec can't decode byte 0x"

python報錯"utf-8 codec can't decode byte 0x"

望文生義,報錯的內容就是說utf-8的編碼方式不能解碼0x的位元組,選擇正確的解碼方式就可以解決。

深入些理解,可以把編碼就是編成位元組資料,就是二進位制的東西,解碼以後就是我們看懂的字串,python裡面就是unicode型別。但是打碼的方式有很多,需要採用適合的方法(打碼方法)才能下馬。比如在檔案操作時,encode就是指明檔案讀寫時的編碼方式。

具體到python中,utf-8編碼的文字可以用iso8859-1的編碼表示,但是反過來不行。iso8859-1是單位元組編碼,而utf8是定長編碼,從utf8轉化成iso8859-1相當於是高精度轉化成低精度,造成精度丟失,所以不可逆。因為utf8中文,在iso8859-1沒有匹配的位置。而gbk是不定長編碼,英文數字的字元編碼規則跟iso8859-1是一樣的,所以gbk是相容iso8859-1編碼的,這兩者可以相互轉換。

有時候即使採用正確的解碼方式,比如iso檔案,一些中文還是有亂碼,得轉成預設的utf-8格式

#iso檔案是iso編碼的二進位制資料
fr = open('iso', 'rb') #可以先用位元組模式獲取資料
data = fr.readline()
data = data.decode('gbk')   #因為gbk相容iso和utf,先按gbk解碼
data = data.encode('utf-8')   #需要的話可以再用utf格式編碼