python3 'utf-8' codec can't decode byte 0xb3
阿新 • • 發佈:2018-12-12
問題:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 109: invalid start byte
該問題發生於decode解碼;
編碼與解碼:
編碼就是將字串轉換成位元組碼,涉及到字串的內部表示。 解碼就是將位元組碼轉換為字串,將位元位顯示成字元。
decode()方法語法:
bytes.decode(encoding="utf-8", errors="strict")
- encoding -- 要使用的編碼,如"UTF-8"。
- errors -- 設定不同錯誤的處理方案。預設為 'strict',意為編碼錯誤引起一個UnicodeError。 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通過 codecs.register_error() 註冊的任何值。
python3例項:
#!/usr/bin/python3
str = "菜鳥教程";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")
print(str)
print("UTF-8 編碼:", str_utf8)
print("GBK 編碼:", str_gbk)
print("UTF-8 解碼:", str_utf8.decode('UTF-8','strict'))
print("GBK 解碼:", str_gbk.decode('GBK','strict'))
例項結果:
菜鳥教程 UTF-8 編碼: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b' GBK 編碼: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc' UTF-8 解碼: 菜鳥教程 GBK 解碼: 菜鳥教程
文章初始丟擲的問題,可能是解碼時的type不正確:
我的具體實踐是:page = request.urlopen(req).read()
rencode = page.decode('utf-8')
丟擲上面的問題;
解決:將解碼type改為gbk,即rencode = page.decode('gbk'),問題得以解決。