UnicodeDecodeError con SQLObject

Victor Peinado vitojph en gmail.com
Dom Sep 16 13:11:22 CEST 2007


¡Hola a todos!

Tengo almacenados una especie de diccionarios bilingües en una base de
datos cuyas tablas guardan toda la información en unicode (está
definidas con SQLObject como UnicodeCol) de la siguiente forma:

class DictEsEn(SQLObject):
    """ Table for Spanish-English entries """
    _connection = conn
    lemma = UnicodeCol(unique=True, length=30, notNull=True)
    translations = UnicodeCol(notNull=True)


Si hago consultas con palabras sin caracteres extraños no hay
problema, p. ej. busco "perro" en mi diccionario y me devuelve cadenas
unicode:

>>> results = DictEsEn.selectBy(lemma="perr")
>>> [item.lemma for item in results]
[u'perr']

Ahora bien, cuando consulto con caracteres con diacríticos me saltan
los famosos UnicodeDecodeError, a pesar de que todas las cadenas son
unicode. P. ej. busco "niño":

>>> results = DictEsEn.selectBy(lemma="niñ")
>>> [item.lemma for item in results]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.4/site-packages/SQLObject-0.10dev_r2716-py2.4.egg/sqlobject/sresults.py",
line 185, in __iter__
    return iter(list(self.lazyIter()))
  File "/usr/lib/python2.4/site-packages/SQLObject-0.10dev_r2716-py2.4.egg/sqlobject/sresults.py",
line 193, in lazyIter
    return conn.iterSelect(self)
  File "/usr/lib/python2.4/site-packages/SQLObject-0.10dev_r2716-py2.4.egg/sqlobject/dbconnection.py",
line 415, in iterSelect
    select, keepConnection=False)
  File "/usr/lib/python2.4/site-packages/SQLObject-0.10dev_r2716-py2.4.egg/sqlobject/dbconnection.py",
line 654, in __init__
    self.dbconn._executeRetry(self.rawconn, self.cursor, self.query)
  File "/usr/lib/python2.4/site-packages/SQLObject-0.10dev_r2716-py2.4.egg/sqlobject/mysql/mysqlconnection.py",
line 113, in _executeRetry
    query = unicode(query, self.encoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
97: ordinal not in range(128)

Mi sistema trabaja con utf-8, si consulto a la tabla con
DictEsEn.selectBy(lemma=u"niñ") obtengo el mismo error anterior.

Cuando comparo directamente la cadena que utilizo para consultar la
base de datos y la que tengo almacena en la tabla son iguales, ambas
unicode.

>>> ej1 = DictEsEn.get(11)
>>> ej1
<DictEsEn 11 lemma=u'ni\xf1' translations="u'child baby kid ...'">
>>> ej1.lemma
u'ni\xf1'
>>> type(ej1.lemma)
<type 'unicode'>
>>> ej1.lemma == u"niñ"
True
>>> ej1.lemma == "niñ"
True


¿A qué se debe el error? ¿Alguna solución? Gracias y saludos.



--
Víctor Peinado | NLP & IR Group - UNED | http://nlp.uned.es/~victor
Tel (+34) 91 398 8106
Skype/GTalk: vitojph
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es