【发布时间】:2012-12-12 15:40:13
【问题描述】:
我正在从 Python (Django) 发送电子邮件。电子邮件主机是“smtp.gmail.com”。当我使用 localhost 时,我可以在电子邮件主题中使用特殊字符。但是,现在我正在从服务器(webfaction)尝试我收到一个错误“UnicodeDecodeError:'ascii'编解码器无法解码字节......”在电子邮件模板中我使用十六进制代码,但它们不适用于主题(它们没有被翻译)。怎么办?
# coding=UTF-8
...
subject = "æøå"
c = {}
t_html = loader.get_template(template_html)
t_text = loader.get_template(template_txt)
e = EmailMultiAlternatives(subject, t_text.render(Context(c)), from_email, [to_email])
e.attach_alternative(t_html.render(Context(c)), "text/html")
e.send()
【问题讨论】:
-
我发现这个stackoverflow.com/a/517974/230884 对我的案例很有用。值得一看。我也同意
mgibsonbr。u并不能解决所有问题。其他一些角色会失败。 -
@CppLearner 我的意思是,只使用
coding不使用也使用u并不总是有效。无论如何,如果环境不支持coding和/或指定的编码,它就无法正确读取源文件。最好使用十六进制代码或\uXXXX。 -
@mgibsonbr 我的想法正好相反。也许这只是我的环境。我已经按照你的建议做了,但这种组合仍然不起作用。所以最后,我必须使用上面链接的解决方案。我对 unicode 知之甚少(真遗憾,哈哈)。因此,
useful for my cases:) 加油。 -
@CppLearner 你是对的,反之亦然。请参阅我的更新答案。不用担心,unicode 是一个棘手的主题,我已经使用它多年,还有很多东西要学(例如,规范化,我不知道)。