Подтвердить что ты не робот

Ошибка 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 символов)

4b9b3361

Ответ 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);