为什么用python和在线webapp将wav文件编码到base64会得到不同的结果?

2024-04-18 11:40:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个简单的web应用程序,它需要播放一些音频文件,使用howler.js。豪勒.js接受base64uri作为输入,所以我想尝试一下。为了测试它,我获取了一个示例音频文件,并使用一个联机的audio-to-base64 encoder来获取base64 URI。我添加了数据描述(“数据:音频/wav;base64,“)base64字符串的前面,并复制并粘贴到下面的JS函数中…:

function playSound() {
    var data = "";
    var sound = new Howl({
      src: [data],
      loop: false
    });
    sound.play();
}

…而且效果很好。因为我要处理大量的音频文件,所以我想用一个简短的python脚本将它们全部转换为base64。为了测试,我使用以下python代码将同一音频转换为base64字符串:

^{pr2}$

我注意到base64的字符串和我之前从网站上得到的不同。我把它粘贴到前面显示的JS函数中,但是当我尝试播放声音时,我得到以下错误:

Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.

python编码到base64的方式似乎有些不同。这是什么原因?在


Tags: to数据函数字符串web应用程序data粘贴
1条回答
网友
1楼 · 发布于 2024-04-18 11:40:56

过了一段时间,问题就显而易见了。这只是我在OP(第二个块)中提到的用于将base64编码写入文件的代码块的问题。在

base64.b64encode(f1.read())返回一个位字符串,在Python中,用以下符号表示(即,当您打印/编写它时,您会看到它是这样的):b'string goes here'。所以问题是b' '被包装在我实际的base64字符串中,我正在使用它。我所要做的就是去掉b' ',这是我通过将位字符串转换成ASCII来完成的:str(encoded_f1,'ascii', 'ignore')。在

真是愚蠢的错误,但希望能帮到别人。在

相关问题 更多 >