【问题标题】:Problem comparing 2 strings, which should be equal [duplicate]比较2个字符串的问题,应该相等[重复]
【发布时间】:2021-03-16 17:26:52
【问题描述】:

我有 2 个字符串:

s1 = "CATS"
s2 = "САTS"

虽然它们看起来一样,但它们并不相同。在 python 或任何方法中比较它们将产生结果FALSE

如果我尝试使用例如编码它们utf-8 在 python 中:

s1 = s1.encode('utf-8')
s2 = s2.encode('utf-8')

然后打印出来

print(s1)
print(s2)

结果是

b'CATS'
b'\xd0\xa1\xd0\x90TS'

当我比较这两个字符串时,我需要在使用s1==s2 时得到结果TRUE。我应该怎么做才能做到这一点?非常感谢您提供可能的解决方法。

【问题讨论】:

  • 你是怎么得到这两个字符串的。显然不是来自简单的赋值语句。第二个字符串显示两个 2 字节字符,后跟 T 和 S。
  • 第二个字符串使用西里尔字母AC,而另一个字符串显然不是。
  • 你可能对Bi-directional transliterator for Python这样的东西感兴趣?
  • 我认为问题不在于规范化文本。假设这两个字符串相同,并且这两个字符串已被证明 not 相同。规范化字符串会忽略这个错误,并且 OP 并没有清楚地向我们传达真正的目标是什么。如果它真的将这两个不相等的字符串硬塞到相等,那么我很乐意纠正。
  • 嗯,是的,我没有使用标准方法得到它们。这两个是 Google VISION API OCR 方法的巨大输出的一部分......在我的代码中,我经常使用它来从图像中提取文本,这些文本会随着时间的推移而略有变化,并且在许多情况下,一次运行中的字符串为我的 s1 输出并在第二次运行时作为 s2... 我的任务是将它们与以前的输出进行比较以跟踪更改,并且由于不一致,这是一场灾难。

标签: python encoding string-comparison


【解决方案1】:

看起来它们是具有不同 Unicode 值的不同字符。

>>> s1 = "CATS"
>>> s2 = "САTS"
>>> ord(s1[0])  # Latin Capital Letter C
67
>>> ord(s2[0])  # Cyrillic Capital Letter Es
1057

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2011-04-25
    相关资源
    最近更新 更多