在Windows中使用Python下载Mp3会损坏歌曲,但在Linux中不会

6 投票
1 回答
5851 浏览
提问于 2025-04-16 05:07

我设置了一个脚本,用Python的urllib2来下载mp3文件。

url = 'example.com'
req2 = urllib2.Request(url)
response = urllib2.urlopen(req2)

#grab the data
data = response.read()

mp3Name = "song.mp3"
song = open(mp3Name, "w")
song.write(data)    # was data2
song.close()

结果发现,这个问题可能和我在Windows上下载有关,或者是我当前的Python版本有关系。我在我的Ubuntu系统上测试了这个代码,mp3文件下载得非常顺利……所以我就用了简单的 urllib2.openurl 方法,效果很好!

总结一下:

  • 我在Ubuntu系统上用Python的 urllib2.openurl
  • 我用的是较新的Python版本,但我觉得这不是问题所在。
  • 这些mp3文件是用LAME编码的。

有没有人知道为什么在我的Windows电脑上运行代码时会出现奇怪的问题?我很好奇为什么在Windows上下载会搞乱mp3文件?

1 个回答

15

试试用二进制文件模式。open(mp3Name, "wb")。你可能遇到了行结束符转换的问题。

这个文件确实是二进制文件,但打开它的方式不对。当你打开一个文件时,可以选择以文本文件的方式读取(这是默认设置)。如果这样做,系统会把行结束符转换成适合当前平台的格式。在Windows系统上,行结束符是\r\n,而在其他地方通常是\r\n。这种转换会搞乱数据流。

撰写回答