【问题标题】:Print shows the same String but if == fails打印显示相同的字符串,但如果 == 失败
【发布时间】:2021-02-11 16:26:52
【问题描述】:

我正在尝试比较 2 个字符串,但 == 运算符失败。如果您打印它们,它们似乎具有相同的值。即使类型相同:str 类,print(repr()) 的输出相同,.strip() 也无济于事,与 in 运算符比较也失败。

字符串是“Neues Textdokument.txt - Edito”和编辑器的窗口名称

感谢@Random Davis 的建议,那里似乎是一个西里尔字母,看起来与拉丁字母一模一样。但是如果您检查字符串 a 和 b : print([ord(c) for c in a]) print([ord(c) for c in b]) 它以十进制显示字母的 unicode 编号。它们分别位于 e 和 M

【问题讨论】:

  • 也许尝试一种显示字符串之间确切差异的方法?喜欢这个:stackoverflow.com/questions/17904097/…
  • 您也可以尝试使用print([ord(c) for c in a])print([ord(c) for c in b]) 来查看字符串ab 之间的确切区别。
  • 感谢这个带有 difflib.ndiff() 的建议,它显示了如下变化: - m- е+ m+ e 但这更令人困惑
  • print([ord(c) for c in a]) 和 print([ord(c) for c in b]) 显示从 77 到 1052 和 1077 到 101 的变化
  • 您应该将这些命令的完整输出放在您的帖子中,以便其他人可以帮助调试。 - m- е+ m+ e 部分让我觉得你只是在某个地方打错了。

标签: python python-3.x string comparison hwnd


【解决方案1】:

所以字符串看起来是一样的,但实际数据中有一些意想不到的 unicode Cyrillic 字符,看起来与 ASCII 字符相同。因此,解决方案是运行以​​下代码,将比较字符串与实际字符串进行比较:

print([ord(c) for c in a])
print([ord(c) for c in b])

这表明在实际数据中,存在西里尔字符“М”和“е”,导致字符串比较返回False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多