encoding

L Solis oficina lsolis en mu.intecsa-inarsa.es
Mar Jul 4 14:29:16 CEST 2006


Chema Cortes escribió:
> L Solis oficina escribió:
>   
>> me encuentro el siguiente problema con la ñ,
>>
>> Traceback (most recent call last):
>>  File "D:\dev\python\dao\Graficos_xy\Data_xy.py", line 424, in append_data
>> lista.append(str(titulo2))
>> UnicodeEncodeError: 'ascii' codec can't encode character u'\xd1' in
>> position 11: ordinal not in range(128)
>>
>> he probado con
>> # -*- coding: iso-8859-15 -*- y con # -*- coding: utf-8 -*-
>> si pongo
>> # -*- coding: utf-16 -*-
>> me da el error
>> SyntaxError: UTF-16 stream does not start with BOM (main.py, line 3)
>>
>>
>> ¿hay alguna manera de poder manejar la ñ?
>>     
>
> Tendría que haber por lo menos una manera, si no habría que inventarla.
>
> Ya lo he puesto alguna vez en un mensaje de la lista, pero no me importa
>  repetir:
>
> Algunas "codificaciones" de la letra Ñ:
>
> latin1   --> d1
> unicode  --> 00d1
> utf8     --> c391
> utf16le  --> fffe d100
>
> Lo digo porque hay que utf8 es tan sólo una codificación de unicodes,
> pero no es su equivalente.
>
> Siguiendo con equivalencias, al trabajar en python con unicode tenemos
> las siguiente equivalencias (según el PEP-100
> http://www.python.org/dev/peps/pep-0100/)
>
> str(u)      -->  u.encode()
> print u     -->  print u.encode()
> repr(u)     -->  "u%s" % repr(u.encode('unicode-escape'))
>
>
> En tu caso, "titulo2" parece estar codificado en unicode con lo que
> "str(titulo2)" es equivalente a "titulo2.encode()" que convierte la
> cadena unicode en la codificación por defecto, normalmente ascii. No hay
> letra 'Ñ' en ascii (ascii7, se entiende), por lo que da error. Tú sabrás
> qué quieres hacer, pero ya que el título lo tienes codificado en unicode
> lo mejor es seguir trabajando en unicode hasta que te veas obligado a
> transformarlo en otra codificación. Para ello no emplees str(); emplea
> titulo2.encode("latin1") o la codificación que necesites.
>
> Especificando la codificación con un comentario "coding" estás indicando
> "desde qué codificación" defines cadenas unicode del texto. Si las
> cadenas las obtienes desde otros módulos o librerías, no te va a influir
> en absoluto para nada.
>
> La codificación del fichero de texto con el código depende del sistema
> operativo que estés usando, pero ayuda bastante los editores de texto
> para programadores que pueden trabajar en varias codificaciones. A
> principio de los ficheros de texto se les suele poner una marca
> "invisible" indicado que está codificado para unicode y el orden de los
> bytes con el que se ha guardado el fichero. Ésa es la marca BOM (Byte
> Order Mark) que le faltaba a tu fichero. No estaba guardado como utf16.
>
>
>
>   
gracias por tu paciencia y vocación docente




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