Python,发送主题中带有特殊字符的电子邮件

Python,发送主题中带有特殊字符的电子邮件,python,email,encoding,Python,Email,Encoding,我正在从Python(Django)发送电子邮件。电子邮件主机是“smtp.gmail.com”。当我使用localhost时,我能够在电子邮件主题中使用特殊字符。然而,现在我正在尝试从服务器(Web派系)获得一个错误“UnicodeDecodeError:'ascii'编解码器无法解码字节…”在电子邮件模板中,我使用十六进制代码,但它们不适用于主题(它们未被翻译)。怎么办 # coding=UTF-8 ... subject = "æøå" c = {} t_html = loader.ge

我正在从Python(Django)发送电子邮件。电子邮件主机是“smtp.gmail.com”。当我使用localhost时,我能够在电子邮件主题中使用特殊字符。然而,现在我正在尝试从服务器(Web派系)获得一个错误“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() 

如果您使用的是Python 2,我建议您在字符串前面加上
u

subject = u"æøå"
(我知道
编码
“神奇评论”应该能自动处理,但根据经验,我可以说它并不总是有效)


更新:为便于将来参考,确保生产环境支持开发中使用的相同编码也很重要。使用
UTF-8应该没问题(它在任何地方都受支持),但是如果您在Windows(
Cp1252
)下编辑源文件,然后部署到UNIX服务器上,那么Python解释器可能无法读取它们,无论是否存在
编码

,我发现这对我的案例很有用。值得一看。我也同意
mgibsonbr
u
并不能解决所有问题。其他一些字符将失败。@我的意思是,只使用
coding
而不同时使用
u
并不总是有效的。无论如何,如果环境不支持
编码
和/或指定的编码,则无法正确读取源文件。最好使用十六进制代码或
\uxxx
@mgibsonbr我的想法正好相反。也许这只是我的环境。我已经按照你的建议做了,但这种组合仍然不起作用。最后,我必须使用上面链接的解决方案。我对unicode知之甚少(这是一个遗憾的lol)。因此,
对我的案例很有用
:)加油。@cppliner你是对的,反过来也是对的。请参阅我的最新答案。别担心,unicode是一个棘手的课题,我已经研究了好几年了,还有很多东西要学(比如,标准化对我来说是未知的)。很好,这就成功了!(我可以在5分钟内接受你的回答)