raw_input()
returns strings as encoded by the OS or UI facilities. The difficulty is knowing which is that decoding. You might attempt the following:
import sys, locale
text= raw_input().decode(sys.stdin.encoding or locale.getpreferredencoding(True))
which should work correctly in most of the cases.
We need more data about not working Unicode comparisons in order to help you. However, it might be a matter of normalization. Consider the following:
>>> a1= u'\xeatre'
>>> a2= u'e\u0302tre'
a1
and a2
are equivalent but not equal:
>>> print a1, a2
ĂȘtre ĂȘtre
>>> print a1 == a2
False
So you might want to use the unicodedata.normalize()
method:
>>> 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
If you give us more information, we might be able to help you more, though.