atob в JavaScript: как декодировать строку в JS

atob — это встроенная в браузеры функция JavaScript, которая декодирует строку, закодированную в формате Base64. Название расшифровывается как “ASCII to binary”, так как функция преобразует строку в двоичные данные, представленные в формате ASCII.

Зачем использовать atob

Base64-кодирование часто применяется для передачи бинарных данных в текстовом формате, например:

  • При передаче файлов через JSON или URL.
  • При работе с токенами и ключами.
  • При шифровании или сериализации данных.

atob выполняет обратную операцию — декодирует такие строки в исходные данные.

Синтаксис atob

atob(encodedString)
  • encodedString — строка, закодированная в Base64.
  • Возвращает — декодированную строку.

Пример использования atob

const encoded = 'SGVsbG8sIHdvcmxkIQ==';
const decoded = atob(encoded);
console.log(decoded); // Hello, world!

Ограничения atob

1. Кодировка символов

atob работает только с данными, содержащими символы в диапазоне ASCII (кодовые точки от 0 до 255). Если данные содержат символы за пределами этого диапазона (например, юникод-символы), потребуется дополнительная обработка.

2. Корректный формат строки

Строка, передаваемая в atob, должна строго соответствовать спецификации Base64: длина должна быть кратной 4 символам, разрешены только символы A-Z, a-z, 0-9, +, / и символ заполнителя =.

Декодирование строки с юникодом

Для работы с юникодом (например, русскими символами) atob требуется дополнение — двойная конвертация с использованием TextEncoder и TextDecoder либо вспомогательных функций:

function decodeBase64Unicode(base64) {
    const binary = atob(base64);
    const bytes = new Uint8Array(binary.length);
    for (let i = 0; i < binary.length; i++) {
        bytes[i] = binary.charCodeAt(i);
    }
    return new TextDecoder().decode(bytes);
}

const encoded = '0JzQvtGB0YI='; // Пример Base64-кодированной строки "Привет"
console.log(decodeBase64Unicode(encoded)); // Привет

Совместимость atob

atob поддерживается во всех современных браузерах, включая:

  • Chrome
  • Firefox
  • Safari
  • Edge

Однако в средах вне браузера (например, Node.js) atob отсутствует. В таких случаях используется Buffer:

const decoded = Buffer.from(encoded, 'base64').toString('utf-8');

atob в JavaScript — это удобный способ декодировать строки в формате Base64 прямо в браузере. Это встроенная функция, не требующая подключения дополнительных библиотек, что делает ее полезным инструментом для работы с закодированными данными в веб-приложениях.