[Python-es] ¿Cómo manejo los caracteres especiales?

lasizoillo lasizoillo en gmail.com
Mie Ene 26 18:54:18 CET 2011


El día 26 de enero de 2011 15:02, Douglas Jiménez <dougjim en gmail.com> escribió:
> El 26 de enero de 2011 09:21, peter <pablomarmol en gmail.com> escribió:
>>
>> El día 26 de enero de 2011 14:31, Douglas Jiménez <dougjim en gmail.com>
>> escribió:
>>
>> > A propósito: ¿por qué funciona una cosa como # -*- coding: UTF8 -*-? Si
>> > el
>> > primer caracter de esta cadena es una orden de comentario, ¿cómo ejerce
>> > alguna influencia sobre el programa?
>> >
>> > Sigo agradeciendo cualquier ayuda o comentario respecto a este asunto.
>>
>>
>>
>> ¿No sabes por qué funciona esa linea  -*- coding: utf-8 -*-  aunque
>> esté comentada con "#" ?
>> Deberías probar a leer la documentación de python, te resultará
>> interesante sobre todo si quieres programar en python.
>
> ¡Seguro! Estoy en eso. ¿Por qué no eres más específico y me diriges hacia la
> lectura que debo hacer, una dirección o algo así?
>
> Uno va consiguiendo las cosas poco a poco y la estructura del sistema se
> hace evidente con la práctica. Si la tuviera de antemano, te aseguro que no
> molestaría a nadie preguntando.
>

Supongo que se referirá a esto:
http://docs.python.org/howto/unicode

La linea "# -*- coding: utf-8 -*-" le dice al intérprete de python en
qué codificación de caracteres está el fichero fuente. Cuando defines
el literal de una cadena:
cadena = "Me tiene hasta el moño"
Esa cadena está codificada de alguna manera (tal vez latin1, tal vez
utf8, ...) y el intérprete de python debe saber cual es dicha
codificación.

Para simplicar el problema hay que pensar en abstracto. El modo texto
se usa para comunicar. Y no basta con tener en cuenta el mensaje, sino
que tienes que tener en cuenta al emisor y el receptor. Si el emisor
manda un mensaje con una codificación, el receptor tiene que decoficar
el mensaje usando dicha codificación.
* Cuando escribes un programa python (tu eres el emisor), el codigo
fuente es el mensaje y con el comentario raro ese el interprete
(receptor) sabe como decoficiar el menaje (el código fuente).
* Cuando imprimes un caracter en una pantalla. La pantalla o terminal
estará configurado con cierta codificación. Si el mensaje no esta
codificado de la misma manera fallará.
* Cuando mandes un mail, puedes definir la codificación del mensaje en
las cabeceras. Si tu programa (emisor) que envia el correo (mensaje)
le dice al receptor (cliente de correo) como está codificado el
mensaje, no deberías tener ningún problema.

Puedo ponerte mil ejemplos de quien es el emisor, quien es el receptor
y cuál es el mensaje, definiendo de forma correcta cual es la
codificación de dicho mensaje. Pero una vez comprendas como funciona
la abstracción, el problema del encoding desaparecerá por siempre.

¿Quién es tu emisor? ¿Cómo codifica el mensaje? ¿Quién es el receptor?
¿Cómo decodifica el mensaje? ¿El mensaje puede indicar al receptor
cómo está codificado o debes poner de acuerdo al emisor y receptor de
otra forma? ¿Tienes algún sistema de codificación común entre emisor y
receptor o tienes aquí un problema? Respondiendo a estas preguntas,
verás que sencillo es todo y si no es sencillo verás como se te
ocurren formas de analizarlo y reparar el error ;-)

Saludos:

Javi


Más información sobre la lista de distribución Python-es