Dos consultas sobre MySQL

Gabriel Genellina gagsl-py2 en yahoo.com.ar
Mie Abr 25 08:31:48 CEST 2007


En Tue, 24 Apr 2007 08:22:03 -0300, Javier Castrillo  
<riverplatense en gmail.com> escribió:

> On 23/04/07, Gabriel Genellina <gagsl-py2 en yahoo.com.ar> wrote:
>>
>> Eso es u"Julián" codificado en latin1 (o iso-8859-1). Pero afirmabas que
>> tu consola esta en utf8 (será cierto? probá con: import sys; print
>> sys.getdefaultencoding(); print sys.stdout.encoding)
>
> Me dan respectivamente  "ascii" y "none"

(Ah, es que estas usando una interfaz grafica, de ahi el None.)

>> Si de verdad estas usando utf8 y de la base de datos te viene un string
>> codificado en latin1, habria que hacer:
>> xxx.decode("latin1").encode("utf8"). Pero es medio feíto.
>
> Ahora, lo que veo es lo siguiente. Para no acumular errores, las
> pruebas de las tuplas (punto 1) lo hice con un registro "Perez Juan" o
> sea sin acentos. Ahora cuando lo pruebo con el famoso "Julián" me
> aparece:
>
>   File "/home/javier/python/wxpython/proyecto_sancabase/sancabase.py",
> line 455, in OnModAlumnos
>     LblQNMA = wx.StaticText(panelMA, -1, "Nombre: %s" % q[0][0], (50,  
> 80))
>   File  
> "/usr/lib/python2.4/site-packages/wx-2.8-gtk2-unicode/wx/_controls.py",
> line 1135, in __init__
>     _controls_.StaticText_swiginit(self,_controls_.new_StaticText(*args,
> **kwargs))
>   File "encodings/utf_8.py", line 16, in decode
> UnicodeDecodeError: 'utf8' codec can't decode bytes in position 12-13:
> unexpected end of data

Uydió... porqué es tan complicada la vida? :)
Esto ya depende de como te llegan las cosas desde la base de datos, estas  
seguro de que vienen en utf8?
En terminos generales, un programa lee datos desde algun lado, y eso le  
viene como strings en algun tipo de codificacion (depende de la entrada);  
ahi nomas al leerlo uno deberia decodificarlo para obtener unicode y  
trabajar internamente siempre en unicode dentro del programa; al momento  
de generar una salida, hay que codificar usando la codificacion correcta  
para el tipo de salida. No necesariamente el encoding de entrada es el  
mismo del de salida.
En tu caso solo podemos asumir que tu interfaz grafica (salida) esta  
usando utf8 porque las strings del codigo fuente -declarado como utf8- se  
muestran bien.
No tengo ni idea de qué querrán decir los de mysql con "utf8-spanish" (si  
es utf8 es unicode, y si es unicode no tiene sentido agregar spanish).
Pero podrias poner: print type(q[0][0]), repr(q[0][0]) para ver si te  
llega string o unicode (en el registro famoso de Julián).


-- 
Gabriel Genellina

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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