Google App Engine 模板Unicode解码问题
在尝试在 Google App Engine 上渲染一个 Django 模板文件时
从 google.appengine.ext.webapp 导入模板
模板路径 = os.path.join(os.path.dirname(file), 'template.html')
self.response.out.write (模板.render(模板路径 , 模板值))
我遇到了以下错误:
<类型 'exceptions.UnicodeDecodeError'>: 'ascii' 编码无法解码字节 0xe2 在位置 17692: 序号不在 范围(128)
参数 = ('ascii', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str...07/a-beautiful-method-to-find-peace-of-mind/ -->
', 17692, 17693, '序号不在范围(128)')
编码 = 'ascii'
结束 = 17693
消息 = ''
对象 = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str...07/a-beautiful-method-to-find-peace-of-mind/ -->
原因 = '序号不在范围(128)'
开始 = 17692
看起来底层的 Django 模板引擎默认使用了 "ascii" 编码,但实际上应该使用 "utf-8" 编码。有没有人知道可能是什么原因导致这个问题,以及如何解决它?谢谢。
3 个回答
你有没有在文本编辑器里检查一下这个模板是不是用utf-8编码的?
你在用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)
其实,模板生成的结果需要先进行解码:
self.response.out.write (template.render( templatepath , template_values).decode('utf-8') )
这真是个小错误,不过还是感谢大家的回答。:)