Atob: примеры (JAVASCRIPT)

Использование функции atob для преобразования Base64 в JavaScript
Раздел: Работа с данными, Кодирование
atob(encodedData: string): string

Описание функции atob

atob()

— это глобальная функция JavaScript, которая декодирует строку данных, закодированных в формате Base64. Название является аббревиатурой от "ASCII to binary". Функция принимает закодированную строку и возвращает декодированную строку, состоящую из символов в диапазоне 0-255 (байтов). Обычно она используется для обработки данных, полученных из внешних источников, таких как Data URL или серверные ответы, где двоичные данные представлены в текстовом виде.

Синтаксис: var decodedData = atob(encodedData);

Аргументы:

  • encodedData (обязательный): Строка, представляющая собой данные, закодированные в Base64. Если строка содержит символы, не входящие в алфавит Base64 (A-Z, a-z, 0-9, +, /, =), функция выбрасывает исключение.

Возвращаемое значение: Строка, содержащая декодированные двоичные данные. Каждый символ в строке представляет собой байт (значение от 0 до 255). Если входная строка пуста, возвращается пустая строка.

Базовые примеры использования

Декодирование простой строки, закодированной в Base64:

console.log(atob('SGVsbG8gV29ybGQh'));
Hello World!

Декодирование строки, содержащей пробелы и специальные символы (предварительно закодированной):

console.log(atob('SmF2YVNjcmlwdCAtIPC/0L7RgdC70LXQtNC+0LLQsNC90LjRjw=='));
JavaScript — программирование

Попытка декодирования пустой строки:

console.log(atob('') === '');
true

Похожие функции в JavaScript

В JavaScript для работы с Base64 также существует парная функция btoa(), которая выполняет обратную операцию — кодирует бинарную строку в Base64. Для работы с бинарными данными в современном JavaScript часто используют TextEncoder и TextDecoder, которые позволяют конвертировать строки в Uint8Array и обратно с указанием кодировки. Также для более сложных сценариев, таких как кодирование/декодирование ArrayBuffer или typed arrays, применяют комбинации этих API. Функции atob/btoa рекомендуется использовать для простых текстовых данных в кодировке Latin1 (ISO-8859-1), а для работы с Unicode (например, строками, содержащими эмодзи или символы кириллицы) предпочтительнее использовать TextDecoder/TextEncoder.

Альтернативы в других языках программирования

PHP: Используются функции base64_decode() и base64_encode(). Они работают аналогично, но могут возвращать бинарные данные.

echo base64_decode('SGVsbG8=');
Hello

Python: Модуль base64 предоставляет функции b64decode() и b64encode(), которые работают с байтовыми строками.

import base64
print(base64.b64decode('SGVsbG8=').decode('utf-8'))
Hello

C#: В пространстве имен System используется метод Convert.FromBase64String() для декодирования в массив байтов.

string decoded = Encoding.UTF8.GetString(Convert.FromBase64String("SGVsbG8="));
Hello

MySQL: Функции FROM_BASE64() и TO_BASE64() для работы в запросах.

SELECT FROM_BASE64('SGVsbG8=');
Hello

Типичные ошибки

1. Передача строки с символами вне алфавита Base64 вызывает исключение DOMException.

try {
    atob('Invalid@String');
} catch (e) {
    console.error(e.message);
}
Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.

2. Попытка декодирования строки в кодировке Unicode (например, напрямую строки с кириллицей) без предварительного корректного кодирования в Base64 через btoa (которая также не поддерживает Unicode напрямую). Это приводит к ошибке или некорректному результату. Для корректной работы необходимо использовать функции encodeURIComponent/btoa или TextEncoder.

Изменения в последних версиях

Спецификация функции atob долгое время остается стабильной. Основные изменения связаны с улучшением обработки ошибок и интеграцией с другими API, такими как HTML Living Standard. В современных браузерах поведение функции строго соответствует стандарту, что гарантирует одинаковые результаты в разных средах выполнения. Существенных изменений в синтаксисе или возвращаемых значениях в последние годы не было.

Расширенные примеры

Декодирование Data URL для получения двоичных данных. Data URL часто содержат префикс "data:image/png;base64,", который необходимо удалить перед декодированием:

Пример javascript
const dataURL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==';
const base64Data = dataURL.split(',')[1];
const binaryString = atob(base64Data);
const bytes = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
    bytes[i] = binaryString.charCodeAt(i);
}
console.log(bytes.byteLength);
70

Обработка строк, содержащих символы Unicode, с использованием комбинации функций:

Пример javascript
function decodeUnicodeBase64(str) {
    return decodeURIComponent(escape(atob(str)));
}
const encodedUnicode = btoa(unescape(encodeURIComponent('Привет, мир!')));
console.log(decodeUnicodeBase64(encodedUnicode));
Привет, мир!

Декодирование Base64 в ArrayBuffer для работы с файлами:

Пример javascript
function base64ToArrayBuffer(base64) {
    const binaryString = atob(base64);
    const len = binaryString.length;
    const bytes = new Uint8Array(len);
    for (let i = 0; i < len; i++) {
        bytes[i] = binaryString.charCodeAt(i);
    }
    return bytes.buffer;
}
const buffer = base64ToArrayBuffer('AQID');
console.log(new Uint8Array(buffer));
Uint8Array(3) [1, 2, 3]

JS atob function comments

En
Atob Decodes a string of data which has been encoded using base-64 encoding.