【问题标题】:Discord.py - ' becomes \\' and I can't decode it back againDiscord.py - ' 变成 \\' 我无法再次解码
【发布时间】:2017-12-05 02:25:54
【问题描述】:

所以我有一个不和谐的机器人,它允许人们从纸牌游戏中命名一张牌,如下所示:!card card name 然后,机器人根据名称构造一个图像 URL,并将其发布到频道。目前,它超级简单,不进行任何验证或任何操作,但它确实有一个我想解决的问题,那就是它不能处理撇号。

如果卡片名称包含撇号(例如“卡片名称”),我的机器人会使用 %27 创建 URL。然而,卡片 db 将撇号替换为“-”。不幸的是,我没有收到撇号,所以 string.replace("'", "-") 不起作用。

我的 IDE 在命令数组中正确显示字符串,当我从那里检索它时,它看起来像这样:Card\\'s Name
我假设它总是被转义,但是当它不是原始字符串时,IDE 会以解析的方式显示它。

我想对此进行解码/解析,以便将其转换为“card-s-name”,但我尝试过的任何方法都不起作用。

urllib.parse.decode "can't decode string", string.replace("\", "") 没有做任何事情,所以我现在有点卡住了。

如何将“card\\'s”变成“card-s”?

这是我现在使用的代码:

def get_card_url(command):

  card_name = ''

  for string in command:
    string = urllib.parse.unquote(string)
    string.replace("'", "-")
    if card_name != '':
        card_name += '-'
    card_name += string.lower()

  return "https://fiveringsdb.com/bundles/card_images/" + card_name + ".png"

我遇到错误的卡称为“Kitsuki 的方法”,并且 url 以https://fiveringsdb.com/bundles/card_images/kitsuki%27s-method.png 而不是https://fiveringsdb.com/bundles/card_images/kitsuki-s-method.png 发布到频道

我希望这有助于消除任何剩余的困惑。

【问题讨论】:

  • card\'s 是您在转义字符完成工作后看到的内容。 card\\'s 似乎是你的初始字符串,所以 "card\\'s".replace("\\'", "-") 应该可以工作
  • 对不起,我总是看到两个反斜杠,但是 SO 逃脱了其中一个。

标签: python python-3.x discord discord.py


【解决方案1】:

在我的 ipython notebook 中,它运行良好。

"card\'s".replace("\'", "-")

输出是card-s

编辑:

如果您对 var 是什么感到困惑,可以打印它。然后,将 Escape 字符用于所需的字符。

例如:

更新:
str.replace() 返回一个新的 str,但它不会改变旧的 str。所以你需要让一个var等于新的str,然后使用这个var。

def get_card_url(command):

    card_name = ''

    for string in command:
        string = urllib.parse.unquote(string)
        string = string.replace("'", "-")
        if card_name != '':
            card_name += '-'
        card_name += string.lower()

    return "https://fiveringsdb.com/bundles/card_images/" + card_name + ".png"

测试:

但是我仍然无法重现你关于%27的错误

【讨论】:

  • 他说他在 ide 中的字符串看起来像 Card\\'s Name 所以在我看来他只是对字符串是什么感到困惑。
  • @StamKaly 我对他的描述感到困惑。也许你是对的。
  • 是的,我错过了 SO 转义了我的一个反斜杠,所以在我的文本的下半部分,它看起来与开始时不一样,即使它应该有。跨度>
  • 所以,当我打印它时,它打印为Card's。然而,当我输出我的字符串时,它变成了card%27s-name。我尝试使用string.replace("\\\'", "-"),但这也没有改变结果。
  • 我将string = string.replace("'", "-") 添加到您的代码中,并得到正确答案。在我的回答中查看我的更新。但我仍然没有得到 %27 的回报。我在 ubuntu 14.04 上使用 python3.4.3 ,ipython1.2.1 。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2018-06-08
  • 2021-07-27
  • 2012-10-04
  • 1970-01-01
  • 2016-05-27
相关资源
最近更新 更多