Python requests处理非ASCII数据的问题

1 投票
2 回答
930 浏览
提问于 2025-04-18 10:10

我在用requests库发送一个文件作为附件时,遇到了使用非ASCII字符的问题。

错误出现在httplib模块的_send_output函数里。你可以看看这张图片:

在这里输入图片描述

这是我的代码:

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

不要使用编码参数来打开文件,因为你想以二进制数据的形式打开它们。打开文件的方式应该像这样:open(f, 'rb')。请求库的文档故意只展示了这样的例子,并且也说明了这种行为。

1

在Python中,open()这个函数有一个叫encoding的参数。你可以这样使用它:f = open('t.txt', encoding='utf-8')。这个参数可以接受很多不同的设置,具体可以参考文档。你需要先搞清楚你的数据使用的是哪种编码方式(通常是UTF-8),然后试着用这个编码方式打开文件,看能不能成功。

撰写回答