📌  相关文章
📜  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 15439: invalid continuation byte - 不管(1)

📅  最后修改于: 2023-12-03 14:48:10.818000             🧑  作者: Mango

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 15439: invalid continuation byte - 不管

这个错误出现在程序中遇到了不能解码的字节,通常是因为编码格式不匹配导致的。这个错误给程序员带来了很多麻烦,因为它可能是从各种地方引起的,比如文件、网络、数据库等等。

常见原因
  • 文件编码格式不匹配:程序中读取的文件编码格式不是UTF-8或者GB2312等常见编码格式,导致无法解码。
  • 网络传输编码格式不匹配:当从网络读取数据时,如果数据的编码格式与程序中指定的编码格式不一致,就可能会引起这个错误。
  • 数据库编码格式不匹配:从数据库读取数据的编码格式与程序中指定的编码格式不一致也可能引起这个错误。
解决方法
方法一:指定正确的编码格式

在程序中正确指定文件、网络、数据库等读取操作的编码格式,保证与原始数据的编码格式一致就可以。

with open('file.txt', 'r', encoding='utf-8') as f:
    data = f.read()
import requests

response = requests.get(url)
response.encoding = 'utf-8'
data = response.text # 解码后的数据
SET NAMES utf8mb4;
方法二:转换编码格式

在程序中进行编码格式转换,将原始数据转换成程序中指定的编码格式。

with open('file.txt', 'rb') as f:
    data = f.read().decode('gb2312')
import requests

response = requests.get(url)
data = response.content.decode('gb2312') # 将数据从GBK编码格式转换成UTF-8编码格式
方法三:使用第三方库

使用第三方库对数据进行编码格式转换,这种方法可以适用于多种编码格式之间的转换。

import chardet # 第三方库,用于检测数据的编码格式

with open('file.txt', 'rb') as f:
    data = f.read()
    encoding_info = chardet.detect(data)
    data = data.decode(encoding_info['encoding'])
import codecs # Python内置库,用于编码格式转换

with codecs.open('filename', 'r', encoding='gb2312', errors='ignore') as f:
    data = f.read()