DOM异常5 javascript中有效base64图像字符串上的INVALID CHARACTER错误

时间:2013-02-04 21:29:13

标签: javascript image base64 decode

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

我作为带有数据URI前言的HTML IMG元素的src(数据:img / png; base64,)成功呈现的字符串,但是当使用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个字符)

2 个答案:

答案 0 :(得分:38)

我只是把头撞在墙上一段时间。

问题有几个可能的原因。 1)Utf-8问题。这里有一个很好的写作+解决方案。 http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html

就我而言,在将其传递给atob之前,我还必须确保所有空格都在字符串之外。 e.g。

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

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

答案 1 :(得分:3)

我必须删除b64前面的data:audio/wav;base64,,因为这是作为b64的一部分提供的。

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

var processed = atob(data);