[pyar] [Fwd: Re: Problema con acentos en Sqlite y Python]

craf pyclutter en gmail.com
Lun Abr 4 19:40:54 ART 2011


--------- Mensaje reenviado --------
> De: Roberto Alsina <ralsina en netmanagers.com.ar>
> Reply-to: Python Argentina <pyar en python.org.ar>
> Para: pyar en python.org.ar
> Asunto: Re: [pyar] Problema con acentos en Sqlite y Python
> Fecha: Mon, 04 Apr 2011 19:19:02 -0300
> 
> On 4/4/2011 7:07 PM, craf wrote:
> > Hola.
> >
> > Buceando por Google me encuentro que es un problema bastante común lo de
> > los acentos en Python. En general dan soluciones de utilizar encode y
> > decode pero no he logrado hacerlo funcionar.
> >
> > Estoy probando Sqlite y quisiera guardar palabras con la letra ñ en la
> > base de datos.
> >
> > El código para guardar en la base de datos es:
> >
> > #! /usr/bin/env python
> > # -*- encoding: utf-8 -*-
> >
> > import sqlite3
> >
> >
> > conn = sqlite3.connect('/mi_ruta/bdatos.db')
> > c = conn.cursor()
> > c.execute("""insert into ciudad values
> >               (1, 'chañaral')""")
> 
> Como no estás usando un objeto unicode sino un str, y declaraste que tu 
> archivo es utf-8,
>   'chañaral' estaría encodeado en utf-8, peeeero...
> 
> > conn.commit()
> > c.close()
> > ----------------------------------------------------
> >
> > El código para leer es el siguiente:
> >
> >
> > #! /usr/bin/env python
> > # -*- encoding: utf-8 -*-
> >
> > import sqlite3
> >
> > conn = sqlite3.connect('/mi_ruta/bdatos.db')
> > c = conn.cursor()
> > c.execute('select * from ciudad')
> > for fila in c:
> >      print fila
> > c.close()
> >
> > Este código me entrega el siguiente resultado:
> >
> > (1,u'cha\xf1aral')
> 
> Eso es 'chañaral' encodeado en latin-1.
> 
> En consecuencia, sospecho que tu archivo 'utf-8' no está en utf-8 sino 
> en latin-1.
> 
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
> 
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

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()

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?).
El archivo que se crea con Geany también se guarda en utf-8.

Otra cosa que omití es que mi sistema es Ubuntu 9.10. y python 2.7.

Saludos.

Cristian







More information about the pyar mailing list