为什么这两个 Python unicode 字符串不同?
Why are these two Python unicode strings different?
我正在 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
所以为了找出哪些字符不同,我将它们打印出来并逐个字符地比较字符串:
for enum, i in enumerate(a):
print a[enum], b[enum], a[enum] == b[enum]
打印出来:
€ € 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
令我惊讶的是,space 是使这两个字符串不相等的字符。我真的不明白这一点。为什么两个 unicode 字符串中的 space 会不同?
有人知道这里出了什么问题吗?欢迎所有提示!
Unicode 定义了一堆不同的 space 字符:
(table 通过 https://www.cs.tut.fi/~jkorpela/chars/spaces.html)。
要准确查看发生了什么,mod您的代码如下:
from unicodedata import name
for enum, i in enumerate(a):
print name(a[enum]), name(b[enum]), a[enum] == b[enum]
...并且将明确使用的确切字符。
我正在 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
所以为了找出哪些字符不同,我将它们打印出来并逐个字符地比较字符串:
for enum, i in enumerate(a):
print a[enum], b[enum], a[enum] == b[enum]
打印出来:
€ € 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
令我惊讶的是,space 是使这两个字符串不相等的字符。我真的不明白这一点。为什么两个 unicode 字符串中的 space 会不同?
有人知道这里出了什么问题吗?欢迎所有提示!
Unicode 定义了一堆不同的 space 字符:
(table 通过 https://www.cs.tut.fi/~jkorpela/chars/spaces.html)。
要准确查看发生了什么,mod您的代码如下:
from unicodedata import name
for enum, i in enumerate(a):
print name(a[enum]), name(b[enum]), a[enum] == b[enum]
...并且将明确使用的确切字符。