Ошибка DOM Exception 5 Ошибка INVALID CHARACTER в действительной строке изображения base64 в javascript
Я пытаюсь декодировать строку base64 для возврата образа в двоичный файл, чтобы он мог быть загружен и отображен локально ОС.
Строка, которую я успешно выполняю, когда ставится как src элемента HTML IMG с предисловием URI данных (data: img/png; base64), но при использовании функции atob или функции закрытия goog она не выполняется.
Однако декодирование преуспевает при вводе здесь: http://www.base64decode.org/
Любые идеи?
EDIT:
Я успешно получил его для декодирования с другой библиотекой, отличной от встроенной функции 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) Проблемы Ут-8. Там хорошая запись + решение для этого здесь. http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html
В моем случае, я также должен был убедиться, что все пробелы были вне строки, прежде чем передать его в atob. например.
function decodeFromBase64(input) {
input = input.replace(/\s/g, '');
return atob(input);
}
Что действительно расстраивало то, что base64 правильно разбирался с использованием библиотеки base64 в python, но не в JS.
Ответ 2
Мне пришлось удалить data:audio/wav;base64,
перед b64, так как это было дано как часть b64.
var data = b64Data.substring(b64Data.indexOf(',')+1);
var processed = atob(data);