window.atob
подходит только для декодирования данных, которые помещаются в строку UTF-8.Все, что не может быть представлено в строке UTF-8, не будет равно его двоичной форме при декодировании.В большинстве случаев Javascript будет пытаться кодировать результирующие байты в последовательность символов UTF-8.Это причина, по которой ваш zip-архив в конце концов становится недействительным.
В тот момент, когда вы делаете следующее:
var data = window.atob(encoded_data)
... у вас другое представление ваших данных в строке UTF-8, на которую ссылается переменная data
.
Вы должны декодировать ваши двоичные данные непосредственно в ArrayBuffer
.И window.atob
не подходит для этого.
Здесь - это функция, которая может преобразовывать данные в кодировке base64 непосредственно в ArrayBuffer
.