如何使用utf-8解码字符串



我有一个已经用utf-8编码的字符串(例如"No\xf0\x9f\x92\x80")。我想解码它,这样它就变成了"否"。然而,当我使用.decode('utf-8)时,它说decode不是str.的函数

这个字符串来自一个txt文件,我正在和pandas一起阅读。

如果长度是6,那么如果使用encoding='utf8'读取文件,则这就没有意义了。它本应该正确解码UTF-8字节,但如果它真的是你所拥有的,这将修复它:

>>> s='Noxf0x9fx92x80'
>>> len(s)
6
>>> s.encode('latin1').decode('utf8')
'No  '

相反,如果字符串中有文字反斜杠和数字,这将起作用:

>>> s=r'Noxf0x9fx92x80'
>>> s
'No\xf0\x9f\x92\x80'
>>> len(s)
18
>>> s.encode('latin1').decode('unicode-escape').encode('latin1').decode('utf8')
'No  '

unicode-escape将转义码转换为Unicode代码点,但仅适用于字节字符串。.encode('latin1')将Unicode代码点1:1翻译为等效的字节(当然,仅适用于U+0000到U+00FF)。

上面的代码将str转换为bytes,对转义进行解码,再次转换为字节,并正确解码为UTF-8。

最新更新