如何在Cheetah模板中渲染unicode字符?

时间:2018-03-10 20:33:16

标签: python cheetah

我想使用Cheetah模板引擎渲染带有Unicode字符的变量。

我的模板文件template.txt如下所示:

This is static text in the template: äöü
This is filled by Cheetah: $variable

我的程序加载该文件,并插入变量variable

from Cheetah.Template import Template

data = [{"variable" : "äöü"}]

# open template
templateFile = open('template.txt', 'r')
templateString = templateFile.read()
templateFile.close()

template = Template(templateString, data)
filledText = str(template)

# Write filled template
filledFile = open('rendered.txt', 'w')
filledFile.write(filledText)
filledFile.close()

这将创建一个文件,其中静态Unicode字符很好,但动态的字符被替换字符替换。

This is static text in the template: äöü
This is filled by Cheetah: ���

所有文件都是UTF-8,如果重要的话。

如何确保正确生成字符?

1 个答案:

答案 0 :(得分:1)

将所有字符串设为unicode,包括文件中的字符串:

data = [{"variable" : u"äöü"}]

templateFile = codecs.open('template.txt', 'r', encoding='utf-8')

filledFile = codecs.open('rendered.txt', 'w', encoding='utf-8')

使用unicode()获取结果,而不是str()

这不是必需的,但建议 - 将#encoding utf-8添加到模板中:

#encoding utf-8
This is static text in the template: äöü
This is filled by Cheetah: $variable

参见猎豹测试中的示例:https://github.com/CheetahTemplate3/cheetah3/blob/master/Cheetah/Tests/Unicode.py