我有一个已经用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。