Проблема декодирования юникода в шаблоне движка Google App - PullRequest
2 голосов
/ 16 июля 2009

При попытке отобразить файл шаблона Django в Google App Engine

из шаблона импорта google.appengine.ext.webapp

templatepath = os.path.join (os.path.dirname ( file ), 'template.html')
self.response.out.write (template.render (templatepath, template_values))

Я сталкиваюсь со следующей ошибкой:

<тип 'Exceptions.UnicodeDecodeError'>: кодек 'ascii' не может декодировать байт 0xe2 в положении 17692: порядковый номер не в Диапазон (128)
args = ('ascii', '<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Str ... 07 / а-красивый-метод к найти-мир-оф-ума / ->
', 17692, 17693,' порядковый номер вне диапазона (128) ')
encoding = 'ascii'
конец = 17693
сообщение = ''
object = '<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Str ... 07 / а-красивый-метод к найти-мир-оф-ума / ->
причина = 'порядковый номер не в диапазоне (128)'
начало = 17692

Похоже, что базовый шаблонизатор django принял кодировку "ascii", которая должна была быть "utf-8". Любой, кто знает, что могло вызвать проблемы и как их решить? Спасибо.

Ответы [ 3 ]

6 голосов
/ 17 июля 2009

Что ж, получается, что отображаемые результаты, возвращаемые шаблоном, должны быть сначала декодированы:

self.response.out.write (template.render (templatepath, template_values) .decode ('utf-8')))

Глупая ошибка, но все равно спасибо за ответы всех. :)

2 голосов
/ 17 июля 2009

Используете ли вы Django 0,96 или Django 1.0? Вы можете проверить, посмотрев ваш main.py и увидев, содержит ли он следующее:

from google.appengine.dist import use_library
use_library('django', '1.0')

Если вы используете Django 1.0, то и FILE_CHARSET, и DEFAULT_CHARSET должны по умолчанию установить значение utf-8. Если ваш шаблон сохранен в другой кодировке, просто установите FILE_CHARSET в любое значение.

Если вы используете Django 0.96, вы можете попробовать напрямую прочитать шаблон с диска, а затем вручную обработать кодировку.

например, заменить

template.render( templatepath , template_values)

с

Template(unicode(template_fh.read(), 'utf-8')).render(template_values)

1 голос
/ 16 июля 2009

Вы проверили в своем текстовом редакторе, что шаблон закодирован в utf-8?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...