[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