You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:15:11