23

我正在尝试将图像的 base64 字符串解码回二进制文件,以便操作系统可以在本地下载和显示它。

将字符串作为带有数据 URI 前言(数据:img/png;base64,)的 HTML IMG 元素的 src 时成功呈现的字符串,但在使用 atob 函数或 goog 闭包函数时失败。

然而,解码成功时放在这里:http ://www.base64decode.org/

有任何想法吗?

编辑:我成功地使用内置 JS 函数以外的另一个库对其进行解码。但是,它仍然无法在本地打开 - 在 Mac 上说它已损坏或格式未知且无法打开。

代码是这样的:

imgEl.src = 'data:img/png;base64,' + contentStr; //this displays successfully
decodedStr = window.atob(contentStr); //this throws the invalid char exception but i just
//used a different script to get it decode successfully but still won't display locally

base64 字符串本身太长,无法在此处显示(限制为 30,000 个字符)

4

2 回答 2

42

我只是在这个墙上撞了一会儿。

这个问题有几个可能的原因。1) UTF-8 问题。这里有一个很好的文章+解决方案。

在我的例子中,我还必须确保在将字符串传递给 atob 之前所有的空格都在字符串之外。例如

function decodeFromBase64(input) {
  input = input.replace(/\s/g, '');
  return atob(input);
}

真正令人沮丧的是,base64 在 python 中使用 base64 库正确解析,但在 JS 中却没有。

于 2013-04-19T22:07:22.250 回答
3

我不得不删除data:audio/wav;base64,b64 前面的,因为这是 b64 的一部分。

var data = b64Data.substring(b64Data.indexOf(',')+1);

var processed = atob(data);

于 2015-09-01T06:13:05.683 回答