[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