如何从python中的url请求将unicode文件(jpg)写入另一个文件

bra*_*orm -1 python unicode file-io python-requests

我试图.jpg使用requestspython中的模块从URL 下载文件.这是我试过的.没有错误.但是我无法打开输出文件.

>>> import requests
>>> l = requests.get("http://www.mosta2bal.com/vb/imgcache/2/9086screen.jpg")
>>> l
<Response [200]>
>>> l.text
u'\ufffd\ufffd\ufffd\ufffd\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\ufffd\ufffd\x12EExif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x07\x01\x12\x00\x03\x......long text
>>> l.encoding
>>> import codecs
>>> f = codecs.open('out.jpg', mode="w", encoding="utf-8")
>>> f.write(l.text)
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 5

您正在尝试访问二进制数据,就像它是文本一样.这意味着请求必须猜测它的编码(并且它所做的任何猜测都是错误的,因为它不是文本)并解码它...只是这样你就可以解码它utf-8.如果你真的很幸运,也许Requests会猜测UTF-8,而你的数据恰好是可以作为UTF-8进行往返的数据,所以它最多只能工作一千次.

只需询问二进制响应内容请求,并将其保存为二进制文件.

虽然我们在这里,但你从来没有真正close的文件.你只是坐在交互式解释器中,还有一个file尚未flush编辑的开放对象.因此,完全有可能最后一个缓冲区的数据,甚至所有数据都不会存在.这正是该with声明的用途.

所以:

l = requests.get("http://www.mosta2bal.com/vb/imgcache/2/9086screen.jpg")
with open('out.jpg', 'wb') as f:
    f.write(l.content)
Run Code Online (Sandbox Code Playgroud)