【发布时间】:2017-07-04 15:43:33
【问题描述】:
我正在使用 S3 Lambda (python + boto3) + AWS SES 创建自动回复电子邮件。
从我的计算机发送电子邮件一切正常。我可以在电子邮件中看到正确的字符串。 “Olá, meu nome é Pedro”。如果我在 python 中打印到控制台,仍然在我的计算机中,字符串也可以。
当电子邮件从 lambda 触发时,我遇到了字符集编码/解码问题,例如“Olá,meu nome é Pedro”。 如果在 lambda s3 控制台中的 python 中,我打印我看到错误的字符串:“Olá¡, meu nome é Pedro”
我需要在邮件标题中设置另一个属性吗?
请看下面的源代码:
# -*- coding: utf-8 -*-
body = u"Olá, meu nome é Pedro"
body = body.encode('UTF-8')
response = client.send_email(
Source='teste@emporiodacerveja.com.br',
Destination={
'ToAddresses': [
"pedrorjbr@gmail.com",
]
},
Message={
'Subject': {
'Data': 'Entre em Contato com Nossa Central de Atendimento',
'Charset': 'UTF-8'
},
'Body': {
'Text': {
'Data': body ,
'Charset': 'UTF-8'
}
}
}
)
【问题讨论】:
-
你用什么代码来打印字符串?您是否按照我在回答中的建议删除了
body.encode('utf-8')?如果你运行print(u'Ol\xe1, meu nome \xe9 Pedro')会发生什么? -
打印(正文)。我已经删除了 body.encode('utf-8')。如果我运行 print(u'Ol\xe1, meu nome \xe9 Pedro') 它打印正确!
-
现在可以了!!我做了:body = u'Ol\xe1, meu nome \xe9 Pedro' 然后使用 body.encode("utf-8")。我如何将我的字符串转换为这种格式以消除特殊字符。
-
如果您正确指定了编码声明,即如果它显示
coding: utf-8,那么您应该确保您的Python 源代码保存为utf-8。它与.encode('utf-8')没有任何关系(运行时的编码是独立的)。要查看 Unicode 字符串的文本表示,只需将其键入 REPL 或print repr(u"Olá")(Python 2)或print(ascii("Olá"))(在 Python 3 中)。如果您将 Unicode 字符串而不是字节作为body传递(如果您删除.encode('utf-8')),它会继续工作吗? -
塞巴斯蒂安,我首先使用 latin-1 对其进行编码,然后使用 utf-8 对其进行编码,现在它可以工作了!!!谢谢!!
标签: python encoding utf-8 boto aws-lambda