JavaScript: декодирование строки в Base64
Вообще штатно есть функции для кодирования/декодирования: atob / btoa. Но один нюанс: если строчку вида «Hello world!» они кодирую-декодируют легко, то с бинарными файлами выйдет ой. Не, они конечно тоже что-то сделают, но с «тихой ошибкой» — т.е. результат будет, но не верен. Попался так, когда с сервера передавал файл в base64 на клиент javascript, декодировал его примерно так:
| 1 2 3 4 5 | let a = document.createElement("a"); let file = new Blob([atob(data.result)], {type: 'application/xlsx'}); a.href = URL.createObjectURL(file); a.download = "template_0.xlsx"; a.click(); | 
А в результате, с виду вроде бы валидный файл, экселем открываться отказался. А всё потому, что atob не работает со строками в Uicode. Потому обычно используют следующие обертки для кодирования-декодирования:
| 1 2 3 4 5 6 7 8 | function base64ToBytes(base64) {   const binString = atob(base64);   return Uint8Array.from(binString, (m) => m.codePointAt(0)); } function bytesToBase64(bytes) {   const binString = String.fromCodePoint(...bytes);   return btoa(binString); } |