Python 两个相同的字符串被视为不同的

标签 python string python-2.7

我有两个字符串,所有迹象表明它们看起来相同:

x1 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600'
x2 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600'

但是,检查是否相等表明它们不是。

In [312]: if x1 != x2:
   .....:     print 'yep'
   .....:
yep

我还尝试从命令提示符中复制两个字符串,然后将它们作为新变量粘贴回去,但它们仍然不相等。我 80% 肯定这是因为它们以一种奇怪的方式编码,插入了一些我看不到的奇怪字符,但使用 type() 两者都显示为字符串。

有什么方法可以让我看到“真实”的字符串吗?感谢您的帮助。

最佳答案

它们不一样;使用 difflib.ndiff()清楚地显示了这两个值的不同之处:

>>> import difflib
>>> print '\n'.join(difflib.ndiff([x1], [x2]))
- N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600
?                                                      ^^             ^

+ N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600
?                                                      ^^             ^

一般来说,当有疑问时使用 repr()看看代表。 Python 2 将对字符串中的任何不可打印或非 ASCII 字符使用转义符,任何“有趣”的字符都会像拇指一样突出。在 Python 3 中,使用 ascii() function对于与 repr() 相同的结果,保守程度较低,Unicode 充斥着乍看之下相同的字符组合。

对于仍然看不到两者之间有什么变化的字符串,上面的 difflib 工具也可以帮助指出到底发生了什么变化。

关于Python 两个相同的字符串被视为不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748880/

相关文章:

python - inspect.getmodule 的结果在 os.chdir 之后改变

python - pandas DataFrame.from_dict 不会产生正确的 multiIndex,其中 dict 的键是元组

python - 如何在不更改文件缩进的情况下使用 ruamel.yaml 包编辑 yaml 文件?

python - 根据 Python 中的其他值创建一个简短的唯一 ID?

python - Selenium Python 在 IE 中使用 window.scroll 向下滚动页面对我不起作用

python - 即使在其中的命令退出后继续 for 循环

c++ - 解析字符串以获取逗号分隔的整数字符对

string - 为什么 String::find 不是 &str 上的方法?

string - 检查字符串是否为 Dart 中的数字

python - 为什么使用 pip install --user 选项安装的软件包不是来自 shell 的 'visible'?