[pyar] problemas con unicode

Facundo Batista facundobatista en gmail.com
Jue Mayo 23 19:59:45 ART 2013


2013/5/23 Miguel Barraza <correo en miguelbarraza.com.ar>:

>>>> l=['hola','¿cómo?']
>>>> print l[0].encode('utf-8')
>
> hola
>>>>
>>>> print l[1].encode('utf-8')
>
> Traceback (most recent call last):
>  File "<pyshell#7>", line 1, in <module>
>    print l[1].encode('utf-8')
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xbf in position 0:
> ordinal
> not in range(128)

Fijate una de las *grandes* reglas de mi charla: nunca, NUNCA, pongas
caracteres no ascii en un string que no sea Unicode.

Sacando dos negaciones: SIEMPRE poné caracteres no-ascii en strings Unicode.

Tu mismo ejemplo:

>>> l = [u"hola", u"¿cómo?"]
>>> print l[0].encode("utf8")
hola
>>> print l[1].encode("utf8")
¿cómo?

Sin embargo, eso te puede confundir. Mejor con repr()

>>> print l
[u'hola', u'\xbfc\xf3mo?']
>>> print repr(l[0].encode("utf8"))
'hola'
>>> print repr(l[1].encode("utf8"))
'\xc2\xbfc\xc3\xb3mo?'

Ahí se ve clarito como que lo que tenés en la lista es una cadena
Unicode, y luego de encodearla tenés una secuencia de bytes.

Y, en general, todos tus textos deberían ser Unicode (tengan
caracteres no ascii o no), porque son *textos*, no secuencia de bytes.

Slds.

--
.    Facundo

Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/
Twitter: @facundobatista



More information about the pyar mailing list