[eside-ghost] python unicode harakiri

Saúl Ibarra Corretgé saghul en gmail.com
Mie Mar 2 11:09:07 CET 2011


Aupa!

2011/3/2 enrike <altern2 en gmail.com>:
> aupa gente
>
> la pregunta del millon... tengo un problemilla con unicode y python,
> creo que no soy en unico. El caso es que tengo que hacer
>
> urllib.urlencode( {'blah': 'ñapás', 'blah': '機体'} )
>
> y por supuesto me casca por error unicode. los valores del diccionario
> vienen de otro lado y llegan como llegan. Pueden tener de todo dentro de
> ellos. Necesito procesarlo para que no casque pero la ñ se me resiste.
>
> estoy venga mirar online pero todo lo que veo me va en la linea de
>  >>> unicode(u'ñapás')
>
> pero es que a mi no me llegan strings de tipo u'blahblah' sino
> simplemente 'blahblah'
>

Usease, que te llega un str de algún lado en algún encoding y tienes
que encodearlo a UTF-8 (pasando por unicode, claro) antes de mandarlo
por la red, cierto?

De tu ejemplo de abajo deduzco que el str te viene encodeado en ISO-8859-1.

Tenemos un str encodeado en iso8859-1 que dice 'ñapa':

s_8859 = '\xf1apa'

Lo pasamos a unicode:

u = s_8859.decode('iso8859-1')

Ahora ya lo podemos encodear como queramos:

s = u.encode('utf-8')

Si miramos la representación de s:

print repr(s)

'\xc3\xb1apa'

Es distinta de s_8859, porque están codificadas con distinto encoding.

Espero que te sirva, he estado sumergido en el infierno de unicode
como un mes hace poco :-)


Saludos,

-- 
/Saúl
http://saghul.net | http://sipdoc.net


Más información sobre la lista de distribución eside-ghost