Python中两个相同字符串被视为不同
我有两个字符串,看起来完全一样:
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
工具也可以帮助你指出具体发生了什么变化。