python字符串的解碼和編碼問題

這幾天在處理一個關於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’)

 

 

 

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