[Python-es] Error codificación carácteres

Antonio Alvarado Hernández aalvaradoh en gmail.com
Lun Feb 28 09:06:01 CET 2011


Hola Jesús,

Los temas de encoding de tus ficheros fuente, se resuelven como bien
te han comentado Juan, lopz y Oscar (no sé si me he dejado a alguien).
 Pero, si lees/escribes datos desde fichero, te toca la hacer como te
han explicado Raúl, Luis, Andrey (y seguro que se me escapa otro).

Para facilitarte la vida, puedes usar el módulo "codecs". He intentado
reproducir tu ejemplo, con este código:

# -*- coding: utf-8 -*-

from codecs import open

INPUT_ENCODING = 'cp1252'
OUTPUT_ENCODING = 'utf-8'

with open('input.dat', 'rb', INPUT_ENCODING) as infile:
	with open('output.dat', 'wb', OUTPUT_ENCODING) as outfile:
		while True:
			inline = infile.readline()
			if not inline:
				break
			outline = u"set title '%s (%s)'" % tuple(inline.split('\t'))
			outfile.write(outline)

# EOF

Fíjate que estoy usando el "open" del módulo "codecs" no el built-in
de Python (en mi caso Python 2.7.1).  También debes fijarte en que los
valores INPUT_ENCODING y OUTPUT_ENCODING, son arbitrarios: he creado
un fichero de datos de entrada (input.dat) con encoding cp1252 (el de
Windoze de toda la vida), y a partir de allí, genero un fichero de
salida (output.dat) con encoding UTF-8 (el de Linux desde hace un
tiempo pa'ca ;-).  Debes ajustarlo a tus necesidades.

Saludos,
Antonio

PD: Mola el tema en el que estás medido... el de los *.MC, no el de
los encodings!

2011/2/27 Juan de Dios Manjon Perez <juande en jdmanjon.net>:
> Prueba a poner en la primera linea:
>
> # -*- coding: cp1252 -*-
>
> Saludos
> Juande
>
>
>
> On 27/02/2011 19:44, Jesús Genicio wrote:
>>
>> Hola a tod en s:
>>
>> Llevo tiempo buscando la solución y no soy capaz. El problema es este:
>>
>> BME.MC
>> Bolsas y Mercados Españoles
>> Traceback (most recent call last):
>>   File "extraer_datos.py", line 80, in<module>
>>     archivo_configuracion.write("set title '%s (%s)'\n"
>> %( Nombre_Valor,id,))
>> UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in
>> position 33: ordinal not in range(128)
>>
>> Los datos los saco de una base de datos y tiene el formato Español, con
>> eñes y acentos, etc..
>>
>> Pero al ejecutar este script, me tira el error y separa. ¿Qué hago mal.?
>>
>>
>> Gracias por vuestra ayuda.
>>
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


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