UnicodeDecodeError con SQLObject
tny
a.porrua en gmail.com
Dom Sep 16 22:37:19 CEST 2007
Yo he hecho algo parecido, empleando SQLite y pyglade
Tuve un error muy parecido, y se debía a que cuando metía las palabras
en la base de datos no lo hacía en unicode.
La única solución fue rehacer la base de datos
Si quieres puedes mirar mi programa en
http://www.infotny.es/gpe/tnydiccionario.zip
El dom, 16-09-2007 a las 13:11 +0200, Victor Peinado escribió:
> ¡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
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
------------ 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