首页 > 解决方案 > 从python 3中字节的字符串表示中检索字节

问题描述

以下代码片段在输出正确的 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

请建议如何解决这个问题。

标签: python-3.xutf-8

解决方案


您所拥有的是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'

推荐阅读