以下代码段可以完美地输出正确的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
请提出解决方法的建议。
答案 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'