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

标签 python string unit-testing unicode

我正在用 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

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

有人知道这里出了什么问题吗?欢迎所有提示!

最佳答案

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

table of Unicode space characters

(表格来自 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]

...并且将明确使用的确切字符。

关于python - 为什么这两个 Python unicode 字符串不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28434109/

相关文章:

python - 为 python setup.py 安装指定头文件位置

python - 如何使用 keras 将数组 reshape 为 3d

python - 如何使用 lxml 获取 XML 声明字符串

python加入 "large"文件

python - 不明白这个 "object not callable"错误

c# - 如何使用Moq框架对azure服务结构进行单元测试?

python - 如何用 Django 编写这个查询集?

c - 如何将一串数字解析为整数数组?

java - 将子字符串替换为 StringBuffer 子字符串

android - 在测试中禁用 Dagger 注入(inject)