python解码utf报错_Python编码-无法解码为utf8

Python试图通过将文本片段(作为字节存储在数据库中)转换为Pythonstr对象来提供帮助。为了进行这种转换,python必须猜测查询返回的每个字节(或字节组)代表的字母。默认猜测是一种称为utf-8的编码。显然,你的猜测是错的。

解决方案是给python一点提示,告诉他如何从字节到字母(即unicode字符)进行映射。你已经接近底线了conn.text_factory = str

但是(基于您在上面注释中的响应),由于您使用的是python 3,str是默认的文本工厂,因此这一行对您没有任何新功能(请参见the docs)。

这一行的幕后操作是,python尝试使用str函数转换查询返回的字节,类似于:your_string = str(the_bytes, 'utf-8') # actually uses `conn.text_factory`, not `str`

…但你需要一个不同的编码,其中'utf-8'是。由于无法更改str函数的默认编码,因此必须以其他方式模拟它。您可以使用一个名为alambda的一次性无名函数来实现以下目的:conn.text_factory = lambda x: str(x, 'latin1')

现在,当数据库将字节传递给python时,python将尝试使用“latin1”方案而不是“utf-8”方案将它们映射到字母。当然,我不知道latin1是否是您数据的正确编码。实际上,你必须尝试一些编码才能找到正确的编码。我将首先尝试以下操作:'iso-8859-1'

'utf-16'

'utf-32'

'latin1'

您可以找到一个更完整的列表here。

另一种选择是简单地让从数据库中输出的字节保持为字节。这对你来说是否是个好主意取决于你的申请。您可以通过设置:conn.text_factory = bytes

你可能感兴趣的:(python解码utf报错)