Google App引擎模板unicode解码问题

时间:2009-07-16 17:40:57

标签: python django google-app-engine unicode

尝试在Google App Engine中呈现Django模板文件时

  

来自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   海峡... 07 / A-美丽的法找到的和平的头脑/    - >
',17692,17693,'序数不在范围内(128)')
        encoding ='ascii'
        结束= 17693
        message =''
        object ='<!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0   海峡... 07 / A-美丽的法找到的和平的头脑/    - >
        reason ='序数不在范围内(128)'
        start = 17692

似乎底层的django模板引擎已采用“ascii”编码,该编码本应为“utf-8”。 谁知道什么可能导致麻烦以及如何解决? 感谢。

3 个答案:

答案 0 :(得分:6)

嗯,结果是模板返回的渲染结果需要先解码:

  

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

一个愚蠢的错误,但无论如何,谢谢大家的答案。 :)

答案 1 :(得分: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)

答案 2 :(得分:1)

您是否在文本编辑器中检查了模板是否以utf-8编码?