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

时间:2014-03-18 17:40:31

标签: python base64 binaryfiles

我正在尝试使用此示例调试更大的音频项目。我加载一个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 :(得分:0)

我猜这是在Windows上。在文本模式下打开文件时,Windows有一个有趣的属性,它在遇到的第一个Ctrl-Z(\x1a)字符处停止。任何压缩文件看起来都像是一个随机的字节序列,这意味着该值必然会在文件的早期发生。

以二进制模式打开文件:

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