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

8 投票
1 回答
13024 浏览
提问于 2025-04-20 16:48

我有两个字符串,看起来完全一样:

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()命令查看时,它们都显示为字符串。

有没有办法让我看到这两个字符串的“真实”内容?任何帮助都非常感谢。

1 个回答

23

这两者并不相同;使用 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() 函数 来获得与 repr() 相同的效果,因为它的处理方式更宽松,而 Unicode 中有很多字符组合乍一看是一样的。

如果在字符串中仍然看不出两者之间的变化,上面的 difflib 工具也可以帮助你指出具体发生了什么变化。

撰写回答