constantemente consigo este error utilizando mako:cómo lidiar con unicode en mako?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 6: ordinal not in range(128)
le he dicho a mako estoy usando Unicode de cualquier manera posible:
mylookup = TemplateLookup(
directories=['plugins/stl/templates'],
input_encoding='utf-8',
output_encoding='utf-8',
default_filters=['decode.utf8'],
encoding_errors='replace')
self.template = Template(self.getTemplate(), lookup=mylookup,
module_directory=tempfile.gettempdir(),
input_encoding='utf-8',
output_encoding='utf-8',
default_filters=['decode.utf8'],
encoding_errors='replace')
html = self.template.render_unicode(data=self.stuff)
Todos mis archivos de plantilla comienza con:
## -*- coding: utf-8 -*-
y, dentro de ellos, todas las cadenas de costant llevan el prefijo "u". Sé que el parámetro self.stuff contiene cadenas de caracteres unicode, pero la forma en que instanciar los objetos de mako debe ocuparse de ello (de lo contrario, ¿para qué sirven esos argumentos?). ¿Hay algo que olvidé hacer?
Una pregunta más: ¿cuál es el punto de encoding_errors = 'replace'?
= edit = Salí de una única cadena Unicode y este es el rastreo:
Traceback (most recent call last):
File "C:\My Dropbox\src\flucso\src\plugins\stl\main.py", line 240, in updateView
flags=self.makoflags)
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\template.py", line 198, in render_unicode
as_unicode=True)
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 403, in _render
_render_context(template, callable_, context, *args, **_kwargs_for_callable(callable_, data))
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 434, in _render_context
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 457, in _exec_template
callable_(context, *args, **kwargs)
File "memory:0x41317f0", line 89, in render_body
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 278, in <lambda>
return lambda *args, **kwargs:callable_(self.context, *args, **kwargs)
File "FriendFeed_mako", line 49, in render_inlist_entry
File "C:\Python26\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u263c' in position 8: ordinal not in range(128)
esto es bueno: me deshice de código de dejar un solo $ {unicode_string_value.decode todos mis plantillas ('UTF-8')} y , ¿adivina qué? mako todavía plantea la excepción ... –
muestra el traceback –
oh y olvidé mencionar que si ejecuto/depuro la aplicación dentro de Eclipse + PyDev, mako no informa ningún error y el html resultante está bien. el inicio desde una consola o un acceso directo da como resultado el error Unicode. –