Python 编码/解码问题
我正在尝试使用Python的模板对象来创建HTML邮件。不过,当应用程序尝试发送邮件时,我遇到了一个错误:
File "/base/data/home/apps/hanksandbox/1.350486862928605153/main.py", line 573, in post
html = messages.email_document_html(document)
File "/base/data/home/apps/hanksandbox/1.350486862928605153/messages.py", line 109, in email_document_html
description = document.get_description()
File "/base/python_runtime/python_dist/lib/python2.5/string.py", line 170, in substitute
return self.pattern.sub(convert, self.template)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 763: ordinal not in range(128)
这个错误相关的代码看起来像这样:
def email_document_html(document):
email_document = Template("""
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
${stylesheet}
</head>
<html>
<body>
<h1 id="mainhead">Essays</h1>
<div class="document">
<span class="info">At ${date} ${author} published:</span><br/><hr/>
<a href="${domain}/${author}/document/${filename}/" target="_blank"><h1 class="title">${title}</h1></a>
<p class="description">${description}</p>
</div>
</body>
</html>
""")
return email_document.substitute(
stylesheet=style,
date=str(document.date),
author=document.author.username,
domain=domainstring,
filename=document.filename,
title=document.title,
description = document.get_description()
)
我的开发环境使用的是UTF-8字符集。我尝试在我的文件中添加# coding: utf-8
。我还尝试在不同的地方添加.encode("utf-8")
或.decode("utf-8")
,特别是在'document.get_description()'之后。但我感觉自己在抓瞎。
有没有什么建议?
2 个回答
2
在你的模板字符串前加一个u
,这样可以告诉Python这个字符串是一个unicode字符串。在Python 3之前,字符串默认被当作ASCII编码,除非你特别说明。
email_document = Template(u"""
...
6