我在使用请求作为附件发送的文件中使用非ascii字符时遇到问题。
_send_output函数中的httplib模块弹出异常。 看到这个图像:
这是我的代码:
response = requests.post(url="https://api.mailgun.net/v2/%s/messages" % utils.config.mailDomain,
auth=("api", utils.config.mailApiKey),
data={
"from" : me,
"to" : recepients,
"subject" : subject,
"html" if html else "text" : message
},
files= [('attachment', open(f)) for f in attachments] if attachments and len(attachments) else []
)
问题在于files参数,包含非ascii数据(希伯来语)。 可以在图像中看到的例外是:
UnicodeDecodeError:'ascii'编解码器无法解码位置673中的字节0xd0:序数不在范围内(128)
答案 0 :(得分:1)
open()
函数has a parameter encoding
,与f = open('t.txt', encoding='utf-8')
一样使用,如文档中所述,接受a variety of parameters。找出您的数据使用的编码方案(可能是UTF-8),看看是否可以使用该编码打开。
答案 1 :(得分:0)
请勿使用encoding参数打开文件,因为您要将它们打开为二进制数据。打开的调用应该看起来像open(f, 'rb')
。请求文档仅显示有目的的示例,甚至记录此行为。