Функции btoa()
и atob()
— это встроенные средства JavaScript для кодирования и декодирования строк в формате Base64.
С 20 марта 2019 года они входят в статус «Widely Available» по Baseline — значит, поддерживаются всеми современными браузерами и подходят для использования в продакшене.
Зачем нужны btoa () и atob ()
🚀 Сегодня вам бесплатно доступен тренажёр по HTML и CSS.
btoa()
(binary to ASCII) — кодирует строку в формат Base64.atob()
(ASCII to binary) — декодирует строку обратно из Base64 в обычный текст.
Base64 — это способ представить бинарные данные в виде безопасного для передачи текста. Это удобно, например, для:
- вставки изображений прямо в HTML;
- передачи файлов или текстов через API;
- хранения данных в
localStorage
; - кодирования данных в параметрах URL.
Как использовать с кириллицей и другими символами
btoa()
работает только с ASCII-строками. То есть с кириллицей, эмодзи и другими символами вне латиницы она не справляется.
Чтобы корректно закодировать и декодировать строку вроде «Привет мир», нужно использовать TextEncoder
и TextDecoder
. Это современные встроенные классы, которые позволяют работать с текстом в кодировке UTF-8.
Вот правильный способ:
// Кодирование в Base64
const utf8 = new TextEncoder().encode('Привет мир');
const base64 = btoa(String.fromCharCode(...utf8));
console.log(base64); // → корректная Base64-строка
// Декодирование обратно в текст
const bytes = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
const text = new TextDecoder().decode(bytes);
console.log(text); // → «Привет мир»
Где пригодится
1. В HTML-файлах:
Можно вставлять изображения как data:
-ссылки.
<img src="data:image/png;base64,..." alt="Иконка">
2. В веб-приложениях:
Например, вы загружаете файл, кодируете его в Base64 и отправляете на сервер через JSON.
3. В localStorage или IndexedDB:
Base64 позволяет хранить бинарные данные в текстовом формате.
4. В URL и ссылках:
Можно безопасно передавать данные, предварительно закодировав их.
Что важно помнить
btoa()
иatob()
не работают с многобайтовыми символами напрямую — это не ошибка, а особенность.- Base64 не шифрует данные — это просто кодировка. Любой может расшифровать её обратно.
- Для файлов, особенно больших, лучше использовать
Blob
,FileReader
,ArrayBuffer
иUint8Array
— ноbtoa()
подойдёт для простых задач.
Если работаете с кириллицей или другими юникод-символами — подключайте TextEncoder
и TextDecoder
. Это сделает ваш код совместимым, предсказуемым и безопасным.
Больше обзоров веб-функций — в телеграм-канале HTML Academy.
Нашли ошибку или опечатку? Напишите нам.