Python MySQL数据库中数据的编码问题

Python MySQL数据库中数据的编码问题,python,encoding,utf-8,iso-8859-1,mojibake,Python,Encoding,Utf 8,Iso 8859 1,Mojibake,我有一个sql数据库存在编码问题,因此它会返回一个类似于以下内容的结果: "Cuvée" 从我可以看出这是因为它被编码为拉丁-1,而它本应该被编码为UTF-8(如果我错了,请纠正我)。我正在用Python脚本处理这些结果,遇到了一些编码问题,无法将其转换回原来的状态: "Cuvée" 我使用的是Python 3.3,但通过使用codecs.decode将latin1更改为utf-8,我得到了: 'str' does not support the buffer interface 我想我

我有一个sql数据库存在编码问题,因此它会返回一个类似于以下内容的结果:

"Cuvée"
从我可以看出这是因为它被编码为拉丁-1,而它本应该被编码为UTF-8(如果我错了,请纠正我)。我正在用Python脚本处理这些结果,遇到了一些编码问题,无法将其转换回原来的状态:

"Cuvée"
我使用的是Python 3.3,但通过使用codecs.decode将latin1更改为utf-8,我得到了:

'str' does not support the buffer interface

我想我已经尝试了我发现的一切,但都没有用。我并不真的热衷于使用Python2.7,因为我已经在3.3上编写了脚本的其余部分,重写它会非常痛苦。有没有一种我不知道的方法可以做到这一点?

试着先转换成字节,然后解码unicode。根据您的示例:

latin_string = "Cuvée"
# Get a byte representation of the latin string
bytes(latin_string,'latin-1')
b'Cuv\xc3\xa9e' # Note the preceding b
# Get a byte representation and decode the utf-8 to get a 'pretty' string
bytes(latin1string,'latin-1').decode('utf-8')
'Cuvée'

是的,你有所谓的a;它可以是拉丁语-1,也可以是拉丁语或其他密切相关的编解码器

您可以尝试编码为拉丁语-1,然后再次解码:

faulty_text.encode('latin1').decode('utf8')
但是,有时,特别是在CP1252 Mojibakes中,错误的编码会导致无法合法编码回字节的文本,因为有些UTF-8字节被强制“解码”,即使编解码器不支持这些字节

您最好的选择是安装,它可以自动为您修复此类Mojibake错误。它包括用于正确撤销CP1252 Mojibake(以及其他相关代码页)的特殊编解码器,这些编解码器绕过了上述问题