【问题标题】:How do I decode a string with utf-8? [closed]如何使用 utf-8 解码字符串? [关闭]
【发布时间】:2020-09-16 00:13:07
【问题描述】:

我有一个已经用 utf-8 编码的字符串(例如“No\xf0\x9f\x92\x80”)。我想对其进行解码,使其变为否????。但是,当我使用 .decode('utf-8) 时,它说 decode 不是 str 的函数。

字符串来自我正在用 pandas 阅读的 txt 文件。

【问题讨论】:

  • 你在用 Python3 吗?
  • 您可以解码 bytesstr,以及编码 strbytes。如果你已经有一个字符串,你就完成了。
  • 首先用正确的编码读取文件。默认不是 UTF-8。
  • 我正在使用python3。该字符串正是“No\xf0\x9f\x92\x80”,所以如果我将它解码为字节,它会变成 b“No\\xf0\\x9f\\x92\\x80” 而不是 No????跨度>
  • 我正在使用:df = pd.read_csv('gpt2_gentext_20200915_223526.txt', encoding="utf-8", delimiter = "=============== =====", index_col=False, names=['Tweet'], engine='python')

标签: python string utf-8


【解决方案1】:

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

>>> s='No\xf0\x9f\x92\x80'
>>> len(s)
6
>>> s.encode('latin1').decode('utf8')
'No?'

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

>>> s=r'No\xf0\x9f\x92\x80'
>>> 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。

【讨论】:

  • 第二个有效。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2018-06-29
  • 2022-11-12
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多