python请求非ascii数据的问题

时间:2014-06-18 07:04:30

标签: python http encoding python-requests mailgun

我在使用请求作为附件发送的文件中使用非ascii字符时遇到问题。

_send_output函数中的httplib模块弹出异常。 看到这个图像:

enter image description here

这是我的代码:

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)

2 个答案:

答案 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')。请求文档仅显示有目的的示例,甚至记录此行为。