我正在尝试使用Mako渲染一些包含Unicode字符的字符串:
tempLook=TemplateLookup(..., default_filters=[], input_encoding='utf8',output_encoding='utf-8', encoding_errors='replace')
...
print sys.stdout.encoding
uname=cherrypy.session['userName']
print uname
kwargs['_toshow']=uname
...
return tempLook.get_template(page).render(**kwargs)
相关的模板文件:
...${_toshow}...
输出结果如下:
UTF-8
Deşghfkskhü
...
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 1: ordinal not in range(128)
我认为字符串本身没有任何问题,因为我可以正常打印它。
尽管我已经(很多次)尝试过 input/output_encoding
和 default_filters
参数,但它总是抱怨无法使用 ascii 编解码。
所以我决定尝试找到在 文档 中找到的示例,以下内容效果最佳:
input_encoding='utf-8', output_encoding='utf-8'
#(note : it still raised an error without output_encoding, despite tutorial not implying it)
随着
${u"voix m’a réveillé."}
并且结果是:
voix mâ�a réveillé
我真的不明白为什么这不起作用。即使使用“魔术编码注释”,也无济于事。所有文件都采用UTF-8编码。
我已经花费了数小时,但没有任何进展,我是不是漏掉了什么?
更新:
现在我有一个更简单的问题:
既然所有变量都是unicode,那么如何让Mako渲染unicode字符串而不应用任何东西?传递一个空过滤器/render_unicode()也没有帮助。