Python Unicode równe porównanie nie powiodło się
To pytanie jest związane z szukaniem znaków Unicode w Pythonie
Czytam plik tekstowy unicode używając kodeków python
codecs.open('story.txt', 'rb', 'utf-8-sig')
I próbował szukać w nim napisów. Ale dostaję następujące ostrzeżenie.
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
Czy istnieje jakiś specjalny sposób porównywania łańcuchów unicode ?
1 answers
Możesz użyć operatora ==
do porównywania obiektów unicode pod kątem równości.
>>> 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
>>>
Ale twój komunikat o błędzie wskazuje, że nie porównujesz obiektów unicode. Prawdopodobnie porównujesz obiekt unicode
do obiektu str
, w ten sposób:
>>> 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
Zobacz, jak próbowałem porównać obiekt unicode z ciągiem znaków, który nie reprezentuje poprawnego kodowania UTF8.
Twój program, jak sądzę, porównuje obiekty unicode z obiektami str, a zawartość str obiekt nie jest poprawnym kodowaniem UTF8. Wydaje się to prawdopodobnie wynikiem tego, że ty (programista) nie wiesz, która zmienna przechowuje unicide, która zmienna przechowuje UTF8, a która przechowuje bajty wczytane z pliku.
Polecam http://nedbatchelder.com/text/unipain.html , szczególnie porady, aby utworzyć " kanapkę Unicode."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-12 18:57:26