Django + sqlite + Unicode

Me enfrenté a un problema con las cadenas Unicode al agregar nuevos registros a una base de datos sqlite a través del sitio de administración.

class Translation(BaseModel): ..... translation = models.CharField(max_length=100) 

Cuando bash insertar una palabra como ‘été’ se produce un error:

 **UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)** 

Actualización: Rastreo agregado: http://pastebin.com/yLYFNDGB

Encontré una solución. En realidad, el problema no estaba en Django o sqlite. El problema fue con el método Unicode ().

Anteriormente era:

 def __unicode__(self): return "{} ({})".format(self.translation, self.word.lang.abbr) 

Después de una solución obvia, el problema se ha ido:

 def __unicode__(self): return u"{} ({})".format(self.translation, self.word.lang.abbr) 

Cuando asigna é como una cadena a una variable, en realidad lo toma como xe9 .

Al igual que si vas al editor de línea de comandos de python y escribes el siguiente código:

 >>> a = u'café' >>> a 

y presione enter, el carácter é se reemplaza por \ xe9 como se ilustra a continuación:

 >>> u'caf\xe9' 

por otro lado, si escribe esto con una statement impresa, obtendría lo que inicialmente asignó, es decir:

 >>> print a café 

Entonces, después de señalar este punto, la solución a su problema es usar la encoding utf8 para deshacerse de \ xe9 . Así puedes codificar tu cadena de la siguiente manera:

 >>> string_for_output = yourstring-with-é.encode('utf8', 'replace') 

Para más información sobre este tema, puede consultar ESTA URL . Discute su problema bajo el encabezado “Frustración # 3: Tratamiento inconsistente de la producción”

Espero que esto ayude.