[Python-es] error al decodificar unicode

Chema Cortes pych3m4 en gmail.com
Jue Mar 3 22:09:41 CET 2011


En Thu, 03 Mar 2011 21:41:59 +0100, Douglas Jiménez <dougjim en gmail.com>  
escribió:

> En su "Manual de Introducción a Python" (que está siendo comentado en  
> estos
> momentos en otro hilo y por lo cual lo felicito y le agradezco) Ángel  
> Luis
> García plantea (pág. 19) crear en
> /usr/local/lib/python2.6/site-packages un archivo sitecustomize.py con el
> siguiente contenido:
>
> import sys
> sys.setdefaultencoding('iso-8859-1')
>
> que (si no entiendo mal) Python debe leer cuando se inicie. Después de  
> esto
> no habría problema con la ejecución del sencillo programa propuesto por
> P en vel. Sin embargo, tampoco con esto he tenido suerte.

No se te ocurra hacerlo así. Resolverás tu problema localmente, pero nunca  
estarás seguro de que tu código funcione en cualquier sitio (si buscas en  
el archivo de esta lista verás alguna discusión antigua sobre el tema).


>> para prueba.py=
>>
>> #!/usr/bin/python
>> # -*- coding: UTF8 -*-
>>

Te sobra un espacio tras la almohadilla.


Vamos a ver si aclaramos algunos conceptos sobre este problema:

1) python puede trabajar "nativamente" con unicode, algo que luego debe  
codificarse según requiera la salida por la terminal. Por tanto, lo  
primero es averiguar qué codificación usa la terminal

2) los ficheros de código pueden haberse codificado en cualquier sistema  
de codificación. La codificación utf puede usar una marca al principio del  
fichero para indicarlo, pero algunos editores de texto no saben manejarlas  
y es mejor no usarlas. Por tanto, lo segundo es indicar con un comentario  
(primera o segunda línea) en qué sistema de codificación está creado el  
fichero. Este comentario únicamente influye en cómo se interpretarán los  
literales unicode en el código (Los que aparecen como u".."). El resto del  
funcionamiento no se ve afectado (ya he dicho que python usa unicode  
"nativamente" (aka como "codepoints").

3) si vamos a leer ficheros de texto que no sean en ascii, se deben abrir  
con 'codecs.open'


Si seguimos con problemas, probar con éste código (codificado en ascii):

print u"Espa\N{LATIN SMALL LETTER N WITH TILDE}a"

Si da error o no se lee "España" correctamente entonces tu problema NO ES  
DE PYTHON.


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