JavaScript и UTF-8
В браузерах есть btoa() и atob(), но эти функции работают со строками, похожими на байты. Прямой ввод китайского текста или emoji может вызвать ошибку или повредить символы.
Используйте UTF-8 байты
Перед кодированием преобразуйте текст через TextEncoder, а после декодирования используйте TextDecoder. Так сохраняются многоязычные данные форм и API.
const bytes=new TextEncoder().encode(text); const encoded=btoa(String.fromCodePoint(...bytes)); const decoded=new TextDecoder().decode(Uint8Array.from(atob(encoded),c=>c.charCodeAt(0)));Работа с файлами
Для небольших предпросмотров используйте FileReader, для крупных файлов обрабатывайте блоки ArrayBuffer. Избегайте огромных промежуточных строк. Проверьте результат в онлайн-кодировщике.