2016-01-15 72 views
0

我有一个具有编码问题SQL数据库,所以它返回我的结果,该结果与此类似:的Python 3.3编码问题

"Cuvée" 

从我可以告诉,这是因为它被编码为拉丁语1时它应该已被编码为UTF-8(请纠正我,如果我错了)。我在Python脚本处理这些结果,并已得到一些编码的问题,一直无法将其转换回到它应该是:

"Cuvée" 

我使用Python 3.3,但使用的编解码器.decode使从latin1更改为utf-8我得到︰

'str' does not support the buffer interface 

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

+1

请显示引发异常的实际代码。你必须*重新编码*(编码,然后解码)。 –

回答

1

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

可以只是试图编码为Latin-1的,然后再进行解码:

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

但是,有时候,特别是与CP1252 Mojibakes,故障编码结果中的文本不能合法编码回到字节,因为即使编解码器不支持这些字节,一些UTF-8字节也被强制“解码”。

你最好打赌是安装ftfy library,它可以自动为你修复这样的Mojibake错误。它包含特殊的编解码器,可以正确地撤销CP1252 Mojibakes(以及其他相关代码页),可以绕过上述问题的编解码器。

+0

非常感谢!这解决了它! – brunoban

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'