Ошибка при использовании команды ‘atob’ — Не удалось выполнить ‘atob’ в ‘окне’: строка, подлежащая декодированию, неправильно закодирована

#javascript #aurelia

#javascript #aurelia

Вопрос:

Мне нужно декодировать строку base64 в файл PDF. Я использую этот код. Но окном.команда atob всегда сообщает об этой ошибке: Не удалось выполнить ‘atob’ в ‘Window’: строка, подлежащая декодированию, неправильно закодирована.

Я знаю, что файл правильный, потому что я уже декодировал его с помощью веб-сайта, который декодирует base64 в pdf. Я не знаю, помогает ли это, но мы используем Aurelia Framework.

Функцией, которая преобразует

 function converBase64toBlob(content, contentType) {
        contentType = contentType || '';
        var sliceSize = 512;
        var byteCharacters = window.atob(content); //method which converts base64 to binary
        var byteArrays = [
        ];
        for (var offset = 0; offset < byteCharacters.length; offset  = sliceSize) {
            var slice = byteCharacters.slice(offset, offset   sliceSize);
            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i  ) {
                byteNumbers[i] = slice.charCodeAt(i);
            }
            var byteArray = new Uint8Array(byteNumbers);
            byteArrays.push(byteArray);
        }
        var blob = new Blob(byteArrays, {
            type: contentType
        }); //statement which creates the blob
        return blob;
    }
  

Вызов функции

 self.blob = self.converBase64toBlob(result.contents[0].pdf.replace(/^[^,] ,/, ''), 'application/pdf');
                self.blobURL = URL.createObjectURL(blob);
                window.open(this.blobURL);
  

Комментарии:

1. обратите внимание, что я полностью уверен, но я видел, как кто-то добавлял ‘=’ в конец до 2 раз, а затем это сработало

2. Я не думаю, что вы можете просто удалить символы из base64 .replace(/^[^,] ,/, '') , не нарушая кодировку

3. Спасибо за помощь, я уже пробовал без replace() и не сработал. Что касается добавления ‘=’ в конце, также не сработало.

Ответ №1:

Я нашел решение. API возвращал строку base64 с символом ». Итак, я удалил все это, и это работает просто отлично.

Комментарии:

1. В моем случае это был символ ‘=’. В любом случае, ваш комментарий помог мне понять идею, теперь это работает!

Ответ №2:

Убедитесь, что вы правильно обработали undefined регистр. В моем случае мой токен обнулялся после обновления, поэтому я, по сути, выполнял atob() с undefined токеном, вызывая эту ошибку.