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 上的二进制文件有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

protobuf-java-2.5.0.jar这个包有啥用

cipher命令有啥用?

.dll文件有啥用?

python 格式化字符串有啥用

Windows 7的VHD磁盘有啥用的?

C语言头文件,conio.h,windows.h,string.h,math.h各有啥用?