我正在运行Python 2.6.6。
cat tbuild.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
from mako.template import Template
_template="""
% for v in my_list:
${'abc'.encode('utf-8')}
${'風連町?'.encode('utf-8')}
% endfor
"""
print Template(_template).render_unicode(my_list = [1, 2],
input_encoding='utf-8',
output_encoding='utf-8',
encoding_errors='replace'
)
./tbuild.py gives.
File "./tbuild.py",
line 15, in <module> print Template(_template).render_unicode(my_list = [1, 2],
File "/usr/lib/python2.6/site-packages/mako/template.py",
line 91, in __init__ (code, module) = _compile_text(self, text, filename)
File "/usr/lib/python2.6/site-packages/mako/template.py",
line 357, in _compile_text node = lexer.parse()
File "/usr/lib/python2.6/site-packages/mako/lexer.py",
line 192, in parse self.filename,)
File "/usr/lib/python2.6/site-packages/mako/lexer.py",
line 184, in decode_raw_stream 0, 0, filename)
mako.exceptions.CompileException: Unicode decode operation of
encoding 'ascii' failed at line: 0 char: 0
如果我用日语删除该行,它可以正常工作。 显然有一些基本的东西我很想理解。
感谢您的帮助, EO
答案 0 :(得分:2)
即使${'á'.encode('utf-8')}
有效,我也会感到惊讶。您需要使用unicode文字u
来指定unicode字符串。将${'風連町?'.encode('utf-8')}
重写为${u'風連町?'.encode('utf-8')}
并对您正在处理的任何文本执行相同操作。
编辑:
考虑到mako:
# -*- coding: utf-8 -*-
from mako.template import Template
_template=u"${u'風連町?'}"
x = Template(_template, output_encoding='utf-8')
print x.render()
output_encoding参数在创建模板时有意义,它在render方法中没有意义。另外,为什么要使用相同的编码对输入进行编码,解码输入,然后使用render_unicode?实际上,render_unicode忽略了output_encoding,所以看起来你真的想要使用render。