Tengo un problema con el unicode ...

Chema Cortés py en ch3m4.org
Jue Ene 26 04:16:03 CET 2006


El Lunes, 23 de Enero de 2006 11:25, Josu Oyanguren escribió:

> En una instalación nueva de Ubuntu 5.10, me he encontrado con problemas con
> las codificaciones unicode. Después de darle unas cuantas vueltas lo he
> reducido a lo siguiente:
>
> Cuando ejecuto python sin argumentos, se pone en una codificación latin-1
> (o parecida):

> >>> print(repr(u'órdigas'))
>
> u'\xf3rdigas'

Antes de nada, te pongo las codificaciones de la letra 'ó':

latin1  --> f3
unicode --> 00f3
utf8    --> c3b3
utf16LE --> fffe f300


Siguiendo con las equivalencias, en python tenemos para unicode las siguientes 
(sacado del PEP-100):

str(u)      -->  u.encode()
print u     -->  print u.encode()
repr(u)     -->  "u%s" % repr(u.encode('unicode-escape'))


Python no se pone en "latin-1" como dices. Cuando ves "\xf3" estás viendo el 
código unicode (en "code-points") y no la codificación "utf8".


> En cambio, si ejecuto con -c, la codificación es utf-8 (que es la que yo
> creo que debería tener)
>
> josu en trueba:~$ python -c "print(repr(u'órdigas'))"
> u'\xc3\xb3rdigas'

Comprobando una cosa más, mira ésto:

$ python -c "import sys;print sys.argv[1]" "print repr(u'órdigas')"
"print repr(u'\xc3\xb3rdigas')"

Así es como ve la cadena el intérprete de python. Como la codificación por 
defecto es ascii, toma la codificación utf8 tal cual le viene. 

Es un fallo conocido que se ha discutido en la lista de desarrolladores del 
python. Parece que no tiene solución de momento.



PD: por cierto, poner paréntesis al comando print simulando una función es 
contrario a las "normas de estilo" python.




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