DOM Exception 5 INVALID CHARACTER 错误在 javascript 中的有效 base64 图像字符串上
Posted
技术标签:
【中文标题】DOM Exception 5 INVALID CHARACTER 错误在 javascript 中的有效 base64 图像字符串上【英文标题】:DOM Exception 5 INVALID CHARACTER error on valid base64 image string in javascript 【发布时间】:2013-01-19 16:45:47 【问题描述】:我正在尝试将图像的 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 个字符)
【问题讨论】:
【参考方案1】:我只是在这个墙上撞了一会儿。
这个问题有几个可能的原因。 1) UTF-8 问题。 here 有一篇很好的文章 + 一个解决方案。
在我的例子中,我还必须确保在将字符串传递给 atob 之前所有的空格都在字符串之外。例如
function decodeFromBase64(input)
input = input.replace(/\s/g, '');
return atob(input);
真正令人沮丧的是,base64 在 python 中使用 base64 库正确解析,但在 JS 中却没有。
【讨论】:
谢谢!这是一个救生员。我在 Base64 中有一个长得可笑的 PDF,它在移动应用程序中产生错误,但在 Web 浏览器中工作。删除空格确实有效。 谢谢你。我有一个类似的问题,但它是一个尾随回车,只出现在 Safari 中。同样的方法修复了它。 Rails 显然经常会砍掉 base64,Chrome 会忽略空格,而 Safari 不会。您的replace
建议让我的应用程序再次在 Safari 上运行。谢谢!
巨大的帮助。无法弄清楚为什么我的 atob 可以在 Chrome 和 FF 中工作,但不能在 IE 中工作。花了太长时间才找到这个。 :)
谢谢,这是救命稻草。【参考方案2】:
我不得不删除 b64 前面的 data:audio/wav;base64,
,因为这是 b64 的一部分。
var data = b64Data.substring(b64Data.indexOf(',')+1);
var processed = atob(data);
【讨论】:
以上是关于DOM Exception 5 INVALID CHARACTER 错误在 javascript 中的有效 base64 图像字符串上的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 Google 地图预加载图标时出错 - INVALID_STATE_ERR: DOM Exception 11
求助:Runtime exception at 0x004000bc: invalid integer input (syscall 5)
为啥 ElasticSearch Nest 客户端会为 MultiPolygonGeoShape 抛出 invalid_shape_exception
sun.security.pkcs11.wrapper.PKCS11Exception:CKR_ATTRIBUTE_TYPE_INVALID
“PayU”Android 集成中的 INVALID_USER_CREDENTIALS/JSON_EXCEPTION
Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR invalid