Python requests处理非ASCII数据的问题
我在用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),然后试着用这个编码方式打开文件,看能不能成功。