Как отобразить символы Юникода в шаблоне Cheetah?

Я хотел бы визуализировать переменную с символами Unicode, используя шаблонный движок Cheetah.

Мой файл шаблона 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()

Это создает файл, в котором статические символы Юникода в порядке, но динамические заменяются заменяющими символами.

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

Все файлы в формате UTF-8, на случай, если это имеет значение.

Как я могу гарантировать, что символы генерируются правильно?

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.

Другие вопросы по тегам