raw_input()
возвращает строки, закодированные средствами ОС или пользовательского интерфейса. Трудность в том, чтобы знать, что это за декодирование. Вы можете попробовать следующее:
import sys, locale
text= raw_input().decode(sys.stdin.encoding or locale.getpreferredencoding(True))
, который должен работать правильно в большинстве случаев.
Нам нужны дополнительные данные о неработающих сравнениях Unicode, чтобы помочь вам. Однако это может быть вопросом нормализации. Учтите следующее:
>>> a1= u'\xeatre'
>>> a2= u'e\u0302tre'
a1
и a2
эквивалентны, но не равны:
>>> print a1, a2
être être
>>> print a1 == a2
False
Так что вы можете использовать метод unicodedata.normalize()
:
>>> import unicodedata as ud
>>> ud.normalize('NFC', a1)
u'\xeatre'
>>> ud.normalize('NFC', a2)
u'\xeatre'
>>> ud.normalize('NFC', a1) == ud.normalize('NFC', a2)
True
Если вы дадите нам больше информации, мы, возможно, сможем вам помочь больше.