Windows 上的二进制文件有啥用?
Posted
技术标签:
【中文标题】Windows 上的二进制文件有啥用?【英文标题】:What's with binary files on Windows?Windows 上的二进制文件有什么用? 【发布时间】:2011-07-29 14:59:18 【问题描述】:我编写了一个脚本来下载文件,但是当我下载二进制可执行文件、swf、图像等时,它只能在 Unix/Linux/OSX 上运行
\#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()
我会得到文件,以及文件中通常不可读的垃圾,但它会不可读。
似乎二进制文件在 Windows 上总是存在这些问题。 这是为什么呢?
PS。如何编写我的 python 代码以便下载?
【问题讨论】:
【参考方案1】:以二进制模式打开二进制文件。
z = open("intro.swf","wb")
【讨论】:
【参考方案2】:在 Windows 上使用 z=open("intro.swf","wb")
以二进制模式打开文件。
http://docs.python.org/tutorial/inputoutput.html
【讨论】:
【参考方案3】:您必须在 open() 的参数中使用“wb”才能以二进制模式获取它 - 默认是文本模式,它将 \n 转换为 CR/LF。
【讨论】:
【参考方案4】:来自Python 2 documentation:
在 Windows 上,“b”附加到模式 以二进制模式打开文件,所以 还有像'rb','wb'这样的模式, 和'r+b'。 Windows 上的 Python 使 文本和二进制的区别 文件;中的行尾字符 文本文件会自动更改 读取或写入数据时稍微。 这个幕后修改为 文件数据适用于 ASCII 文本 文件,但它会损坏二进制数据 像 JPEG 或 EXE 文件中的那样。是 使用二进制模式时非常小心 读取和写入此类文件。在 Unix,附加一个 'b' 并没有什么坏处 到模式,所以你可以使用它 平台无关的所有二进制文件 文件。
【讨论】:
更准确地说:在文本模式下阅读时,平台的本机行尾(Windows 上的 \r\n)被转换为 Python 的 Unix 风格的 \n 行尾。在文本模式下书写时,会发生相反的情况。在 UNIX 上没有这样的问题。以上是关于Windows 上的二进制文件有啥用?的主要内容,如果未能解决你的问题,请参考以下文章