[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