Я пишу некоторые модульные тесты в Python, и теперь у меня довольно странная ошибка. Я сравниваю две строки, которые кажутся совершенно одинаковыми, но я получаю ошибку утверждения. Приведенный ниже код выводит то, что я заметил позади:Почему эти две строки юникода 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 будет отличаться?
Не знаете, что здесь неправильно? Все советы приветствуются!
Мои психические силы говорят мне, что одно из этих пространств - это неразрывное пространство ('U + 00A0'), а не« нормальное »пространство (' U + 0020'). –
Проверьте текущий код для разного характера. Существует много символов, которые выглядят одинаково (как пробелы) – Slam
для перечисления, i в перечислении (a): print ord (a [enum]), ord (b [enum]), [enum] == b [enum] # см., что кодирует – LexyStardust