Error en la comparación de igualdad de Python unicode


Esta pregunta está vinculada a Buscando caracteres Unicode en Python

Leo el archivo de texto unicode usando codecs python

codecs.open('story.txt', 'rb', 'utf-8-sig')

Y estaba tratando de buscar cadenas en él. Pero estoy recibiendo la siguiente advertencia.

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

¿Hay alguna forma especial de comparación de cadenas unicode ?

Author: Community, 2013-08-12

1 answers

Puede usar el operador == para comparar objetos unicode para la igualdad.

>>> 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
>>> 

Pero, su mensaje de error indica que no está comparando objetos unicode. Probablemente estás comparando un objeto unicode con un objeto str, así:

>>> 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

Vea cómo he intentado comparar un objeto unicode con una cadena que no representa una codificación UTF8 válida.

Su programa, supongo, está comparando objetos unicode con objetos str, y el contenido de un str object no es una codificación UTF8 válida. Esto parece probablemente el resultado de que usted (el programador) no sabe qué variable contiene unicide, qué variable contiene UTF8 y qué variable contiene los bytes leídos desde un archivo.

Recomiendo http://nedbatchelder.com/text/unipain.html , especialmente el consejo de crear un "Sándwich Unicode."

 70
Author: Robᵩ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-12 18:57:26