Python urllib在windows下生成乱码输出?

Python urllib在windows下生成乱码输出?,python,windows,urllib,Python,Windows,Urllib,我使用下面的代码片段在linux(debian)下从web下载了一个图像,没有任何问题。当我在windows中运行完全相同的代码时,生成的图像是乱码。有什么问题 import urllib, os url = "http://www.crummy.com/software/BeautifulSoup/10.1.jpg" contents = urllib.urlopen (url).read() fn = os.path.join(os.path.expanduser("~"), "winima

我使用下面的代码片段在linux(debian)下从web下载了一个图像,没有任何问题。当我在windows中运行完全相同的代码时,生成的图像是乱码。有什么问题

import urllib, os
url = "http://www.crummy.com/software/BeautifulSoup/10.1.jpg"
contents = urllib.urlopen (url).read()
fn = os.path.join(os.path.expanduser("~"), "winimagetest")
fh = open(fn, "w");fh.write(contents);fh.close()
目标系统是Windows7,64位,python安装是32位。(这无关紧要,如果python是64位的,则会出现相同的乱码输出)


我上传了乱码:

对于Windows,您需要以二进制模式打开文件,因为Windows区分二进制文件和文本文件。它可以在Linux上正常工作,因为Linux没有这样的区别

换线

fh = open(fn, "w")

<>你也可以考虑做以下事情:

with open(fn, "wb") as fh:
    fh.write(contents)

因为它将处理在任何类型的异常情况下为您关闭文件。

urllib是不推荐使用的。你应该退房。这并不是说它会引导您找到错误的来源,只是一个建议。我的第一次尝试是确保您打开的文件是以二进制格式编写的,我相信这不是windows上的默认格式<代码>打开(fn,“wb”)作为二进制文件打开解决了这个问题,这是多么微不足道的事情@sberry,你能添加你的答案吗?我最初写了一行python(它不能包含复杂的语句,如
with
),这样我可以轻松地复制到windows cmd,但问题中的内容太难理解了,所以我将每行都拆分。但是谢谢你的回答。
with open(fn, "wb") as fh:
    fh.write(contents)