Google App Engine 模板Unicode解码问题

2 投票
3 回答
2400 浏览
提问于 2025-04-15 12:57

在尝试在 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 个回答

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)

6

其实,模板生成的结果需要先进行解码:

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

这真是个小错误,不过还是感谢大家的回答。:)

撰写回答