[pyar] Problema con acentos en Sqlite y Python
Roberto Alsina
ralsina en netmanagers.com.ar
Lun Abr 4 22:27:42 ART 2011
craf writes:
> Hola Roberto.
>
> He tratado de convertir explícitamente la cadena a unicode con el
> siguiente código pero sin resultado:
>
> ---Código-----
> #! /usr/bin/env python
> # -*- encoding: utf-8 -*-
>
> import sqlite3
>
>
> conn = sqlite3.connect('/mi_ruta/bdatos.db')
> c = conn.cursor()
> valor = 1
> nombre =u'Chañaral'
> t =(valor, nombre)
> c.execute('insert into tabla1 values(?, ?)',t)
> conn.commit()
> c.close()
Aca no estas convirtiendo la cadena a utf-8 en ninguna parte.
Declaraste que el archivo es utf-8 (con el comentario) y
declaraste que nombre es un literal unicode (conla u).
Los literales unicode no son utf-8 ni ningun otro encoding, son unicode.
Para convertirlo a utf-8, tenes que hacer nombre.encode('utf-8')
> Ahora, realmente no se por donde pueda estar guardándose en Latin-1,
> porque me imagino que al utilizar el encode a UTF-8 lo estaría guardando
> con esa codificación en la base de datos(¿o no?).
No necesariamente.
> El archivo que se crea con Geany también se guarda en utf-8.
Como estas seguro de esto?
>
> Otra cosa que omití es que mi sistema es Ubuntu 9.10. y python 2.7.
Una fora posible de diagnosticar esto es hacer un programa que:
* Cree un literal unicode
nombre = u'Cha~naral' # Perdon no tengo enie en este teclado ;-)
* Vea su representacion, para asegurarse que esta bien:
print repr(nombre)
* Lo encodee a utf-8 como dije antes
* Lo guarde en la base
* Lo lea de la base
* Imprima de nuevo la repr de lo que sacas de la base
* Convierta eso a unicode (con decode('utf-8'))
Si lo que imprime primero y lo que imprime ultimo son iguales, listo,
problema resuelto. Si son distintos, lo que imprime en el medio puede darnos
una pista.
More information about the pyar
mailing list