从python 3

时间:2018-11-22 06:44:25

标签: python-3.x utf-8

以下代码段可以完美地输出正确的UTF8字符表示形式:

a = b"Tenemos la Soluci\xc3\xb3n"
a.decode('utf8')
'Tenemos la Solución' # correct output

但是在我的用例中,实际字节作为字符串存储在数据库中。在那种情况下,如何使用正确的UTF8表示检索输出?

a = "Tenemos la Soluci\xc3\xb3n" # retrieved from Database
b = bytes(a, 'utf8')
b.decode('utf8')
'Tenemos la Solución' # incorrect output

请提出解决方法的建议。

1 个答案:

答案 0 :(得分:2)

您拥有的是mojibake,例如,当UTF-8编码的文本存储在为ISO-8859-1或类似编码配置的数据库中时,就会发生这种情况。 latin1是Unicode代码点到等效字节的1:1映射,假定Unicode字符串仅包含U + 0000到U + 00FF,并且可以用来解决问题:

>>> a = "Tenemos la Soluci\xc3\xb3n" # retrieved from Database
>>> a.encode('latin1').decode('utf8')
'Tenemos la Solución'