El día 30 de julio de 2010 10:32, Arnau Sanchez <[email protected]> escribió:
> 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??
>
>
> La clave es ver la diferencia entre una cadena y su representación
> (repr):
>...
> 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.
No siempre coincide que eval(repr(s)) dé el objeto original. En
general, 'repr' no debería usarse para otra cosa que no fuera para
obtener información sobre del objeto. Si queremos ver las eñes y los
acentos es conveniente convertir la cadena a la codificación de la
cónsola pasándola a string (con str()) o, aún mejor, usar el comando
print:
>>> euro=u'\N{EURO SIGN}'
>>> euro
u'\u20ac'
>>> print euro
€
En python3 todas las cadenas están codificadas en "unicode" (no más
líos). Insisto, una vez más, que unicode!=utf8. Unicode usa
"codepoints" para codificación interna, mientras que utf8 (y otros
utfs) son codificaciones más manejables y optimizadas. Ejemplo
curioso: los código de latin1 son los mismos que en codepoints de
unicode, mientras que no ocurre así con utf8 por el mecanismo extra
necesario en la codificación multibyte.
En python2, las cadenas unicode siguen diferenciadas de las demás. La
función de la cabecera de codificación es para saber desde qué
codificación de origen hay que codificar las cadenas unicode (las que
llevan prefijo u'..'). Fuera de ahí, no cambia nada sobre el
comportamiento de unicodes o cadenas ascii.
> Este tema, de una u otra forma, ha aparecido muchas veces en la
> lista (Chema se ha hartado a contestar preguntas de utf8 :-)).
Ya ves que todavía no estoy completamente harto ;-)
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/