What's with binary files on Windows?

百般思念 提交于 2019-12-13 05:40:59

问题


I made a script to download a file, but it only works on Unix/Linux/OSX when I'm downloading binary executables, swf's, images, etc

\#Modfied section from PWB.py  
import sys  
if sys.version_info<(2,8):  
    import urllib as request  
else:  
    import urllib.request as request  
x=request.urlopen("http://homestarrunner.com/intro.swf")  
y=x.read()  
x.close()  
z=open("intro.swf","w")  
z.write(y)  
z.close() 

I will get the the file, and the usual unreadable garbage in the file, but it will be unreadable.

It seems binary files always have these sorts of problem on Windows. Why is this?

PS. How could I write my python code so that it will download?


回答1:


From the Python 2 documentation:

On Windows, 'b' appended to the mode opens the file in binary mode, so there are also modes like 'rb', 'wb', and 'r+b'. Python on Windows makes a distinction between text and binary files; the end-of-line characters in text files are automatically altered slightly when data is read or written. This behind-the-scenes modification to file data is fine for ASCII text files, but it’ll corrupt binary data like that in JPEG or EXE files. Be very careful to use binary mode when reading and writing such files. On Unix, it doesn’t hurt to append a 'b' to the mode, so you can use it platform-independently for all binary files.




回答2:


Open binary files in binary mode.

z = open("intro.swf","wb")



回答3:


Use z=open("intro.swf","wb") on Windows to open the file in binary mode.

http://docs.python.org/tutorial/inputoutput.html




回答4:


You have to use "wb" in the argument for open() to get it in binary mode - the default is text mode which converts \n to CR/LF.



来源:https://stackoverflow.com/questions/5546500/whats-with-binary-files-on-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!