3

我正在运行 Python 2.6.6。

猫 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

4

1 回答 1

2

即使${'á'.encode('utf-8')}工作我也会感到惊讶。您需要使用 unicode literal 指定 unicode 字符串u。重写${'風連町?'.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。

于 2012-12-06T04:17:39.753 回答