[Python-es] error al decodificar unicode

lasizoillo lasizoillo en gmail.com
Lun Mar 7 15:43:11 CET 2011


El día 7 de marzo de 2011 13:57, (P en vel) <pdlopez en uci.cu> escribió:
>             patrim = str(incident1.contents[15].contents[0])
>             participes = str(incident1.contents[17].contents[0])
>             vocacion = incident1.contents[5].contents[0]

Espero que no estes convirtiendo a string cosas que deberían ser
unicode. El python3 nombra bien a las cosas. Piensa en str como arrays
binarios y en unicode como en cadenas de caracteres.

De todas formas, la manera idonea de convertir a cadenas es
cosa_unicode.encode(encoding) y str(cosa_no_unicode). Por si acaso
también está mal ese código también.

>             sql = "INSERT INTO `bolsa` (`id`,
> `gestora`,`vocacion`,`fecha`,`ultimo`,patrim,`participes`)
> VALUES(NULL,'%s','%s','%s','%s','%s','%s');"
> %(gestora,vocacion,fecha,ultimo,patrim,participes)

Cada vez que escribes una linea así Dios mata a un gatito:
http://wiki.python.org/moin/DbApiFaq

>             conn.cursor.execute(sql)

Pasa aquí los parámetros para el insert, nunca jamás construyas la
sentencia sql con el operador %. Haciendo esa cutrez es fácil
conseguir inyectar sql y hacerle todo tipo de maldades a tu base de
datos.

Repasa las conversiones a str de tu código, arregla la llamada a base
de datos y si el problema persiste vuelve a escribir el código. Es
probable que haciendo las cosas bien el driver de base de datos sea lo
suficientemente listo como lidiar con problemas de seguridad, de
encodings y evitaras que Dios mate gatitos ;-)

De todas formas, tampoco vamos a poder probar tu código si no sabemos
con que encoding trabaja tu base de datos. Si te vas a poner a mirarlo
dale vuelta también a una cosa que las bb.dd. llaman collation y que
sirve para ordenar de forma correcta las cadenas. Por ejemplo, que la
ñ vaya entre la n y la o cuando hacemos algo en español.

Saludos:

Javi


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