2009-07-16 22 views
2

Google App EngineのGoogle App EngineのテンプレートUnicodeのデコード問題

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))

をDjangoのテンプレートファイルをレンダリングしようとすると、私は次のようなエラーに遭遇:

<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

それは根本的なDjangoテンプレートと思われますエンジンは、 "utf-8"であったはずの "ascii"エンコーディングを想定しています。 何が問題を引き起こしたのか、それを解決する方法を知っている人は誰ですか?おかげさまで

+1

DEFAULT_CHARSETの値は何ですか? が役に立つかもしれません。 – lavinio

答えて

6

まあと

template.render(templatepath , template_values)

を交換し、テンプレートで返されるレンダリング結果が最初に復号する必要が判明:

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

愚かな間違いだが、tとにかくみんなのハンクスです。 :)

1

テンプレートがutf-8でエンコードされていることをテキストエディタでチェックしましたか?

2

Django 0.96またはDjango 1.0を使用していますか?あなたがDjangoの1.0を使用している場合は、FILE_CHARSETとDEFAULT_CHARSET両方が「UTF-8」にデフォルトで設定される必要があり

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

:それは次のものが含まれている場合は、あなたのmain.pyを見て、見て確認することができます。テンプレートが別のエンコーディングで保存されている場合は、FILE_CHARSETをそのまま設定してください。

Django 0.96を使用している場合は、ディスクからテンプレートを直接読み込み、手動でエンコーディングを処理してください。

例えば、

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

関連する問題