为什么这两个Python unicode字符串不同?

kra*_*r65 1 python string unicode unit-testing

我正在用Python编写一些单元测试,现在我有一个相当奇怪的错误.我比较两个字符串,看起来完全相同,但我得到一个断言错误.下面的代码打印出我后面评论的内容:

print type(a), len(a), a  # <type 'unicode'> 12 € 290.000,00
print type(b), len(b), b  # <type 'unicode'> 12 € 290.000,00
print a == b  # False
Run Code Online (Sandbox Code Playgroud)

因此,为了找出哪些字符不同,我将它们打印出来并按字符比较字符串:

for enum, i in enumerate(a):
    print a[enum], b[enum], a[enum] == b[enum]
Run Code Online (Sandbox Code Playgroud)

打印出来:

€ € True
   False  # <== THE SPACE IS NOT EQUAL?!!?
2 2 True
9 9 True
0 0 True
. . True
0 0 True
0 0 True
0 0 True
, , True
0 0 True
0 0 True
Run Code Online (Sandbox Code Playgroud)

所以令我惊讶的是,空间是使这两个字符串不相等的字符.我真的不明白这一点.为什么两个unicode字符串中的空格会有所不同?

有人知道这里有什么不对吗?欢迎所有提示!

bgp*_*ter 6

Unicode定义了一堆不同的空格字符:

Unicode空格字符表

(表格来自https://www.cs.tut.fi/~jkorpela/chars/spaces.html).

要查看到底发生了什么,请修改您的代码:

from unicodedata import name

for enum, i in enumerate(a):
    print name(a[enum]), name(b[enum]), a[enum] == b[enum]
Run Code Online (Sandbox Code Playgroud)

......并且使用中的确切字符将被明确表示.

  • 它根本不吸引人. (3认同)