Python3如何正确下载并保存二进制WAV文件(避免数据篡改)
解决Python中使用requests下载WAV二进制文件数据篡改的问题
你的问题核心在于错误地将二进制响应内容当成文本处理了,res.text会尝试用系统默认的编码把响应字节解码成字符串,而WAV这类二进制文件包含很多非文本编码的字节,这个解码过程会破坏原始数据,再转成字节自然就不对了。
直接用requests响应对象的content属性就能拿到原始的二进制字节流,不需要额外转换,直接写入文件即可。正确的代码应该是这样:
import requests # 你原来的代码里拼错成requets了,这里要修正 waveurl = 'http://www...../song.wav' res = requests.get(waveurl) # 最好先检查请求是否成功,避免写入无效数据 if res.status_code == 200: with open("song.wav", "wb") as f: # 你原来的代码里引号没闭合,这里修正 f.write(res.content) else: print(f"请求失败,状态码:{res.status_code}")
为什么原来的方法不行?
res.text是为处理文本内容设计的,它会根据响应头的编码或者自动猜测的编码来解码字节,二进制文件(比如WAV、图片、压缩包)的字节序列不符合任何文本编码规则,解码时会替换掉无法识别的字节,导致数据永久损坏。res.content则直接返回服务器响应的原始字节,完全保留了二进制数据的完整性,适合处理非文本文件。
另外,你提到的struct.pack("B", each_byte)方法没必要,因为res.content已经是正确的字节类型了,不需要再逐个字节打包。
内容的提问来源于stack exchange,提问作者yzahavi
相关产品推荐
相关产品推荐

