保存Base64编码文件到磁盘时数据丢失

0 投票
1 回答
678 浏览
提问于 2025-04-17 22:50

我正在调试一个比较大的音频项目,想用这个例子来帮助我。我加载了一个mp3文件,然后把它转换成base64格式,再解码,最后保存到硬盘上。但是,保存下来的文件不完整,虽然base64格式的看起来是一样的:

import base64
with open('/Users/Public/Music/119-the_killers-spaceman.mp3') as f:
mp3 = f.read()
>>> len(mp3)
1435
>>> b64 = base64.b64encode(mp3)
>>> len(b64)
1916 #I expect it to become 25% larger when encoded.
>>> MP3 = base64.b64decode(b64)
>>> f.close()
>>> F = open('test.mp3','wb')
>>> F.write(MP3)
>>> F.close()
>>> len(MP3)
1435

数据是一样的:

>>> MP3[:100]
'ID3\x03\x00\x00\x00\x00\x05GTRCK\x00\x00\x00\x06\x00\x00\x0019/24TIT2\x00\x00\x00\t\x00\x00\x00SpacemanTPE1\x00\x00\x00\x0c\x00\x00\x00The KillersTALB\x00\x00\x00\x1b\x00\x00\x00Funky New Year 2009: I'
>>> mp3[:100]
'ID3\x03\x00\x00\x00\x00\x05GTRCK\x00\x00\x00\x06\x00\x00\x0019/24TIT2\x00\x00\x00\t\x00\x00\x00SpacemanTPE1\x00\x00\x00\x0c\x00\x00\x00The KillersTALB\x00\x00\x00\x1b\x00\x00\x00Funky New Year 2009: I'

实际文件大小是2k,而不是2.5MB。

我哪里出错了?希望这也能解释我在保存发送到我服务器的base64编码的WAV文件时遇到的问题。

1 个回答

0

我猜这个问题是在Windows系统上。Windows有一个有趣的特点,当你以文本模式打开一个文件时,它会在遇到第一个Ctrl-Z(\x1a)字符时停止读取。任何压缩文件看起来都像是一串随机的字节,这意味着这个值很可能会在文件的早期就出现。

你可以以二进制模式打开这个文件:

with open('/Users/Public/Music/119-the_killers-spaceman.mp3', 'rb') as f:

撰写回答