2009-07-16 2 views
2

При попытке вынести файл шаблона Django в Google App EngineGoogle App Проблема шаблонный движок юникода декодирования

from google.appengine.ext.webapp import template

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

я наткнулся на следующую ошибку:

<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 17692: ordinal not in range(128)
args = ('ascii', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str...07/a-beautiful-method-to-find-peace-of-mind/ -->
', 17692, 17693, 'ordinal not in range(128)')
encoding = 'ascii'
end = 17693
message = ''
object = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str...07/a-beautiful-method-to-find-peace-of-mind/ -->
reason = 'ordinal not in range(128)'
start = 17692

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

+1

Какова ценность вашего DEFAULT_CHARSET? может помочь. – lavinio

ответ

6

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

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

Глупая ошибка, но t Хэнки для всех ответов в любом случае. :)

1

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

2

Вы используете 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)

Смежные вопросы