[pyar] Problema con encoding
Andrés Gattinoni
andresgattinoni en gmail.com
Mar Jul 26 13:02:29 ART 2011
2011/7/26 Mariano Reingart <reingart en gmail.com>:
>> No entiendo por qué un string puedo imprimirlo sin problemas, pero
>> cuando lo quiero escribir en una archivo se rompe todo.
>> Qué se me está escapando?
>
> Los archivos no tienen encoding por defecto, por eso falla .
> De hecho, el print anda porque lo ejecutas en la consola, si
> redireccionas la salida, también posiblemente va a fallar.
Tenés razón, si redirecciono la salida cuando quiero abrir el archivo
me muestra el mismo quilombo binario.
> http://wiki.python.org/moin/PrintFails
>
> Si no me equivoco, tendrías que decodear el string para abrir el
> archivo (cosa que hace codecs.open), y encodearlo para imprimirlo:
>
> f.write(rendered.encode("utf8"))
Lo probé pero también me da error:
Traceback (most recent call last):
File "process.py", line 66, in <module>
sys.exit(main(sys.argv))
File "process.py", line 63, in main
render('./index.html', 'templates/index.tpl', data)
File "process.py", line 15, in render
f.write(rendered.encode('utf8'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position
3352: ordinal not in range(128)
> Tambièn podrìas usar codecs.open en la salida para evitarlo, pero no
> es del todo seguro si no sabés que se va a escribir.
A qué salida te referís? Actualmente estoy abriendo con codecs.open
tanto el archivo que tiene el template como el que quiero escribir.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import codecs
from gluon import template
def render (filename, template_file, data):
tplfile = codecs.open(template_file, 'r', 'utf-8')
html = tplfile.read()
tplfile.close()
f = codecs.open(filename, 'w', 'utf-8')
#f = open(filename, 'w')
rendered = template.render(html, context=data)
print rendered
f.write(rendered.encode('utf8'))
f.close()
Lo que yo pienso es, si la consola (que la tengo en utf-8) puede
interpretar bien los caracteres cuando hago el print.
Por qué no puedo escribirlos directamente (o traducidos a lo que
corresponda) en el archivo?
More information about the pyar
mailing list