[pyar] Una consulta mas sobre unicode

Alejandro Santos listas en alejolp.com
Sab Ene 11 11:26:09 ART 2014


2014/1/10 Nicolás Rebagliati <nicolas.rebagliati en aenima-x.com.ar>:
>
> pero si lo hago desde django:
>
>         print(type(stp.name))
>         print(u"Nombre {0}".format(stp.name))
>
> <type 'unicode'>
>
> 'ascii' codec can't encode character u'\xf1' in position 12: ordinal not in range(128)
>

Tu manejo de Unicode de esta forma está bien, la regla de oro (que ya
te la dijo fisa pero te la repito) es que no tenés que mezclar tipos.
Si tenés un string Unicode, todas las operaciones deben ser con
parámetros y tipos unicode. Es por eso que hacer esto está mal:

  u"Nombre {0}".format(algo_unicode.encode('utf-8'))

A un Unicode le estas formateando un parámetro que no es unicode (es un str).

El problema acá es que el print que no puede imprimir el string, de
alguna manera al usar Django se cambia la codificación de la terminal
y el print no sabe como mostrar el string Unicode. Ejemplo:

alejo$ python
Python 2.7.3 (default, Jan  2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print(u'\xe1rbol')
árbol
>>>

alejo$ LANG=C python
Python 2.7.3 (default, Jan  2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print(u'\xe1rbol')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in
position 0: ordinal not in range(128)
>>>



-- 
Alejandro Santos


More information about the pyar mailing list