這幾天在處理一個關於python對字節碼解碼問題。因爲不知道字節碼的編碼方式,採用utf-8,gbk,gb18030等編碼規則解碼字節碼序列總是偶爾會出現解碼失敗的錯誤。在網絡上搜索了很多,最後纔在下面鏈接找到了一個勉強能滿足要求的方法。記錄如下。
參考自:https://www.cnblogs.com/zz22--/p/8799071.html
===============================================================
編碼方法encoding()
描述
encode() 方法以指定的編碼格式編碼字符串,默認編碼爲 'utf-8'。將字符串由string類型變成bytes類型。
對應的解碼方法:bytes decode() 方法。
語法
str.encode([encoding
=
'utf-8'
][,errors
=
'strict'
])
- str是表示需要編碼的字符串,並且是個string類型。
- encoding -- 可選參數,要使用的編碼方案,默認編碼爲 'utf-8'。
- errors -- 可選參數,設置不同錯誤的處理方案。默認爲 'strict',意爲編碼錯誤引起一個UnicodeError。 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通過 codecs.register_error() 註冊的任何值。
返回值
該方法返回編碼後的字符串,它是一個 bytes 對象,這個字節對象是用於下面的解碼用的。
===============================================================
解碼方法decode()
decode() 方法以 encoding 指定的編碼格式來解碼字符串。默認編碼規則是encoding=‘utf-8’
語法:
bytes.decode(encoding='UTF-8',errors='strict')
參數
bytes是由編碼方法encoding()編碼轉換過後得到的字符串的字節表示值。
encoding -- 解碼時要使用的編碼方案,如"UTF-8"。
errors -- 設置不同錯誤的處理方案。默認爲 'strict',意爲編碼錯誤引起一個UnicodeError。 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通過 codecs.register_error() 註冊的任何值。
返回值:
該方法返回解碼後的字符串。
UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
使用python的時候經常會遇到文本的編碼與解碼問題,其中很常見的一種解碼錯誤如題目所示,下面介紹該錯誤的解決方法,將‘gbk’換成‘utf-8’也適用。
(1)、首先在打開文本的時候,設置其編碼格式,如:open(‘1.txt’,encoding=’gbk’);
(2)、若(1)不能解決,可能是文本中出現的一些特殊符號超出了gbk的編碼範圍,可以選擇編碼範圍更廣的‘gb18030’,如:open(‘1.txt’,encoding=’gb18030’);
(3)、若(2)仍不能解決,說明文中出現了連‘gb18030’也無法編碼的字符,可以使用‘ignore’屬性進行忽略,如:open(‘1.txt’,encoding=’gb18030’,errors=‘ignore’);
(4)、還有一種常見解決方法爲open(‘1.txt’).read().decode(‘gb18030’,’ignore’)