【问题标题】:Unicode unescaping PythonUnicode 转义 Python
【发布时间】:2021-04-29 17:50:33
【问题描述】:

我正在从 API 检索用户名,我得到的值如下:

\u00e2\u0098\u0085Random Name\u00e2\u0098\u0085 <3

当我尝试打印出来时,我最终得到:

★Random Name★ <3

但它应该是:

★Random Name★ <3

\u00e2\u0098\u0085 似乎是 的构造函数,它看起来像 unicode 转义序列,但显然转换中出了点问题。
需要一些关于如何部分取消转义字符串的帮助。

编辑: (更多细节)
我正在尝试创建一个不和谐的机器人,它会根据检索到的玩家信息定期更新角色。

上面的第一个值正是我从 API 中得到的,我无法改变它

★Random Name★ &lt;3 是发送到服务器的消息。
我确定 discord 支持字符集,因为我可以直接粘贴用户名而不会出现问题

data = json.loads(response.text)用于解析和存储响应
await message.channel.send(f"Name: {data['name']}")用于发送消息

send()discord.py 的一个函数部分,用于在特定通道中发送消息

【问题讨论】:

  • 您正在查看从 latin-1 解码的字节,而这些字节应该是 utf-8。如果没有看到生成它的代码,就很难知道如何修复。
  • 您能否向我们展示您用于“尝试转换”的代码,以便我们讨论如何更具体地修改该代码?
  • 某些东西(API 或它的接口)坏了。 E2 98 85 是 Unicode 码位 U+2605 的 UTF-8 编码。您不应该在 str 值中获取那些特定于编码的字节。
  • 您的帖子本身可能实际上存在编码问题。我刚刚尝试修复格式,但revision history 说我也更改了数据,这是不正确的,但无论我尝试什么都无法修复它。为了解决这个问题,请提供minimal reproducible example,包括您的代码和实际输入数据(因为我们需要知道格式:字节、str 等)。你可以edit这个问题。顺便说一句,欢迎来到 SO!如果需要提示,请查看tourHow to Ask
  • 我询问实际输入数据的原因是因为这不是字符串。字符串包含在引号中。如果将其粘贴到 Python 控制台中,则会得到 SyntaxError: unexpected character after line continuation character。尝试执行print(repr(x)),其中x 是输入数据。

标签: python unicode decode


【解决方案1】:
print('\u00e2\u0098\u0085Random Name\u00e2\u0098\u0085 <3'.encode('latin').decode())

结果:

★Random Name★ <3

【讨论】:

    【解决方案2】:

    如果不查看代码,我们无法给出具体答案,但您应该像这样对其进行编码:

    username = (API call)
    username = username.encode('utf-8')
    print(username)
    

    您的代码可能不同,但由于我们无法访问它,这是我们能提供的最好的。

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多