UnicodeDecodeError con SQLObject

Luis Miguel Morillas morillas en gmail.com
Lun Sep 17 00:10:00 CEST 2007


Veo que usas utf-8

>>> unicode("niñ", 'ascii')

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    unicode("niñ", 'ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
2: ordinal not in range(128)

>>> unicode("niñ", 'utf-8')
u'ni\xf1'


En la línea

query = unicode(query, self.encoding)

¿Cuál es el valor de self.encoding?  Debería de ser utf-8 o un
encoding que soporte los caracteres que estás usando.


-- lm



2007/9/16, Victor Peinado <vitojph en gmail.com>:
> ¡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
>
>




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