JavaScript-код отличается от Notepad ++ Base64 Decode - PullRequest
0 голосов
/ 24 сентября 2019

Я получаю содержимое zip-файла (из API) в виде строки в кодировке Base64.

Если я вставлю эту строку в Notepad ++ и перейду

Плагины> MIME Tools> Base64 Decode

и сохраните его как test.zip, он станет действительным zip-файлом, я могу его открыть.

Теперь я пытаюсь добиться того же самого в JavaScript .

Я пытался atob(), и, вероятно, все, что упоминается в ответы здесь и код из Mozilla doc .

atob производит аналогичное содержимое, но некоторые символы декодируются по-разному (следовательно, становится недопустимым zip-файлом).Другие методы выдают недопустимую ошибку URI.

Как воспроизвести поведение Notepad ++ в JavaScript?

1 Ответ

2 голосов
/ 24 сентября 2019

window.atob подходит только для декодирования данных, которые помещаются в строку UTF-8.Все, что не может быть представлено в строке UTF-8, не будет равно его двоичной форме при декодировании.В большинстве случаев Javascript будет пытаться кодировать результирующие байты в последовательность символов UTF-8.Это причина, по которой ваш zip-архив в конце концов становится недействительным.

В тот момент, когда вы делаете следующее:

var data = window.atob(encoded_data)

... у вас другое представление ваших данных в строке UTF-8, на которую ссылается переменная data.

Вы должны декодировать ваши двоичные данные непосредственно в ArrayBufferwindow.atob не подходит для этого.

Здесь - это функция, которая может преобразовывать данные в кодировке base64 непосредственно в ArrayBuffer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...