Ответ 1
Вы можете использовать оператор ==
для сравнения объектов Unicode для равенства.
>>> s1 = u'Hello'
>>> s2 = unicode("Hello")
>>> type(s1), type(s2)
(<type 'unicode'>, <type 'unicode'>)
>>> s1==s2
True
>>>
>>> s3='Hello'.decode('utf-8')
>>> type(s3)
<type 'unicode'>
>>> s1==s3
True
>>>
Но ваше сообщение об ошибке указывает, что вы не сравниваете объекты unicode. Вероятно, вы сравниваете объект unicode
с объектом str
, например:
>>> u'Hello' == 'Hello'
True
>>> u'Hello' == '\x81\x01'
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False
Посмотрите, как я попытался сравнить объект unicode с строкой, которая не представляет допустимую кодировку UTF8.
Ваша программа, я полагаю, сравнивает объекты unicode с объектами str, а содержимое объекта str не является допустимой кодировкой UTF8. Это кажется вероятным результатом того, что вы (программист) не знаете, какая переменная содержит unicide, какая переменная содержит UTF8 и какая переменная содержит байты, считанные из файла.
Я рекомендую http://nedbatchelder.com/text/unipain.html, особенно совет по созданию "Юникод-сэндвич".