-1

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

"Cuvée"

据我所知,这是因为当它应该被编码为 UTF-8 时它被编码为 latin-1(如果我错了,请纠正我)。我正在 Python 脚本中处理这些结果,并且遇到了一些编码问题,并且无法将其转换回应有的状态:

"Cuvée"

我正在使用 Python 3.3,但通过使用 codecs.decode 将 latin1 更改为 utf-8 我得到:

'str' does not support the buffer interface

我想我已经尝试了所有我发现无济于事的事情。我不太热衷于使用 Python 2.7,因为我已经在 3.3 上编写了脚本的其余部分,而且重写会很痛苦。有没有办法做到这一点,我不知道?

4

2 回答 2

1

是的,你有所谓的Mojibake;它可能是 Latin-1,也可能是Windows Codepage 1252或其他密切相关的编解码器。

可以尝试编码为 Latin-1,然后再次解码:

faulty_text.encode('latin1').decode('utf8')

但是,有时,尤其是使用 CP1252 Mojibakes,错误的编码会导致文本无法合法地编码回字节,因为即使编解码器不支持这些字节,某些 UTF-8 字节也会被强制“解码”。

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

于 2016-01-15T21:16:27.017 回答
1

尝试先转换为字节,然后解码 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'
于 2016-01-15T21:09:32.347 回答