On Thu, 29 Jul 2010 11:50:40 -0700 (PDT) Jean Carlos Rodrìguez wrote:

> >>> a = 'eñe'
> >>> print a
> eñe
> >>> b = []
> >>> b.append(a)
> >>> b
> ['e\xc3\xb1e']
> >>> b[0]
> 'e\xc3\xb1e'
> >>> utf8 = lambda s: unicode(s, 'iso-8859-1').encode('utf-8')
> >>> utf8(b[0])
> 'e\xc3\x83\xc2\xb1e'
> 
> Como hago para que tenga los acentos y eñes??

Este tema, de una u otra forma, ha aparecido muchas veces en la
lista (Chema se ha hartado a contestar preguntas de utf8 :-)).

La clave es ver la diferencia entre una cadena y su representación
(repr):

>>> s = "camión"
>>> print s
camión
>>> s
'cami\xc3\xb3n'  

Cuando la consola muestra algo por pantalla (tercera línea), estás
viendo el repr() del objeto:

>>> print repr(s)
'cami\xc3\xb3n'

En el repr() de un objeto sólo aparece ASCII, todo lo demás está
escapado. Habría que mirar el código, pero aparentemente se hace algo
tipo string_escape + añadir comillas simples:

>>> print s.encode("string_escape")
cami\xc3\xb3n

En resumen, en repr() no verás nunca acentos, eñes, etc, se trata de
crear un objeto que pueda evaluarse sin problemas (fíjate que
eval(repr(s)) = s). No sé si en Python3K está previsto que esto cambie.
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a