Dos consultas sobre MySQL

Gabriel Genellina gagsl-py2 en yahoo.com.ar
Dom Mayo 6 10:28:20 CEST 2007


En Wed, 02 May 2007 13:02:30 -0300, Javier Castrillo  
<riverplatense en gmail.com> escribió:

>> Esto ya depende de como te llegan las cosas desde la base de datos,  
>> estas
>> seguro de que vienen en utf8?
>
> sgún phpmyadmin es utf-8-unicode-ci
>
> Fijate lo que me llega:
>
> <type 'str'> 'Juli\xe1n'

Ah, pero eso no es utf8, sino probablemente iso-8859-1 (latin1) o  
iso-8859-15 o incluso cp1252 (windows). Si fuera utf8 se vería como  
'Juli\xc2\xa0n'

> Traceback (most recent call last):
>   File "/home/javier/python/wxpython/proyecto_sancabase/probador.py",
> line 36, in OnAceptar
>     LblQ = wx.StaticText(self.panel, -1, "Nombre: %s" % q[0][0], (15,  
> 90))
>   File  
> "/usr/lib/python2.5/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

Y ese error es totalmente logico, si recibe una string en latin1 y la  
quiere decodificar como si estuviera en utf8...
Lamentablemente no se me ocurre como solucionarlo (o se me ocurren  
demasiadas cosas muy vagas). Seguramente alguien que conozca MySQL podria  
decir cual es la mejor forma. Porque aparentemente tanto Python como wx  
piensan que tu terminal es utf8 (sino los literales "Ácéntúádós" no  
saldrían bien por pantalla) pero desde la base de datos te llegan cosas en  
latin1 o parecido (y ahi es donde wx se confunde, al tratar de  
interpretarlas como utf8 cuando en realidad es otra cosa).

Algo que se puede hacer -o más bien, un parche- sería decodificar el  
resultado mismo del query en el momento en que lo recibis. En la linea de  
arriba:

LblQ = wx.StaticText(self.panel, -1, "Nombre: %s" %  
unicode(q[0][0],"iso-8859-15","replace"), (15,90))

y asi con *todos* los lugares donde se reciben datos de la b.d. Pero  
admito que es extremadamente tedioso (aunque probablemente funcione).

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