Загрузить файл
  1. base64hub
  2. Текстовые инструменты
  3. Декодер Base64

Декодер Base64: декодировать Base64 в текст онлайн

Вставьте строку Base64 и сразу прочитайте декодированный текст. Переносы строк, префиксы data:, URL-safe символы и отсутствующее дополнение = обрабатываются сами, а ошибки указывают на конкретный символ.

Бесплатно без регистрации и ограничений Локально ничего не загружается Авто распознаёт PNG, PDF, ZIP, JSON и другое Обновлено 27 окт. 2026 г.
Ввод 0 BРезультат 0 BРазмер –

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как декодировать Base64

  1. Вставьте Base64 в поле Ввод · Base64. Переносы строк, пробелы, кавычки вокруг и префикс data:...;base64, можно не убирать: декодер удалит их сам.
  2. Декодированный текст появится в поле Результат · текст. Строка статуса сообщает Корректный Base64, вариант (Standard или Base64URL), число декодированных байтов, а в поле Похоже на показывает тип содержимого.
  3. Если текст искажён, смените Кодировку или выберите Автоопределение.
  4. Если внутри JSON, Форматировать JSON расставит отступы для удобного чтения.
  5. Нажмите Скопировать результат или Скачать, чтобы сохранить декодированные байты файлом. Расширение зависит от определённого типа, так что JSON сохраняется как decoded.json, а PNG как decoded.png.

Поменять местами отправляет декодированный текст обратно во ввод и переключает на кодирование. Так легко убедиться, что строка проходит туда и обратно без потерь.

Что принимает декодер

Base64 редко приходит чистым. Он бывает разбит по 76 символов из письма, взят в кавычки из JSON-файла, percent-кодирован из URL или лишён дополнения в токене. Декодер принимает всё это без каких-либо настроек:

Вы вставляетеВы получаетеЧто произошло
SGVsbG8gV29ybGQHello WorldНедостающий = восстановлен, строка статуса сообщает об этом
8J-Riw👋URL-safe - и _ распознаны, вариант показан как Base64URL
data:text/plain;base64,SGk=HiПрефикс data URI удалён
"SGVsbG8="HelloКавычки из кода или JSON удалены
SGVsbG8%3DHelloURL-кодированный %3D прочитан как =
SGVs (перевод строки) bG8=HelloПереносы строк и пробелы пропущены

К такой упаковке декодер снисходителен, а ко всему остальному строг. Символ вне алфавита его останавливает, ошибка называет символ и его позицию, и дальше декодер ничего не угадывает. Некоторые библиотеки поступают иначе: молча пропускают плохие символы и отдают испорченный результат (см. раздел с кодом ниже).

Для URL-safe токенов отдельно есть декодер Base64URL, который объясняет алфавит, а различия разобраны в статье Base64 и Base64URL.

Если в Base64 закодирован файл

Base64 переносит любые байты, и во многих строках Base64 лежат картинки или документы. Инструмент сверяет первые байты декодированных данных с известными сигнатурами файлов (magic numbers) и показывает итог в поле Похоже на: PNG, JPEG, PDF, ZIP, gzip, JSON, XML и многое другое. Для двоичных форматов он показывает печатный предпросмотр, сообщает, что данные двоичные, и даёт ссылку на нужный инструмент, например Base64 в картинку или Base64 в PDF. Скачать в любом случае сохраняет исходные байты.

Начало строки Base64 часто выдаёт формат ещё до декодирования:

Base64 начинается сБайты после декодированияФормат
iVBORw0KGgo89 50 4E 47 0D 0A 1A 0AИзображение PNG
/9j/FF D8 FFИзображение JPEG
JVBERi0%PDF-Документ PDF
UEsDBAPK 03 04ZIP, а также DOCX и XLSX
H4sI1F 8B 08Данные gzip (декодер Base64 + gzip)
eyJ{"JSON, часто часть JWT
PD94bWwg<?xmlXML

Больше сигнатур собрано в статье о частых префиксах Base64. Для файла неизвестного типа есть Base64 в файл: он определит формат и покажет предпросмотр.

Кодировки: как починить кракозябры

Base64 хранит байты и ничего не говорит о том, какая кодировка превратила символы в эти байты. Декодер предполагает UTF-8, и для большинства современных данных это верно. Когда нет, симптомы узнаваемы:

  • Символы � и пометка «Часть байтов не читается как UTF-8». Текст пришёл в устаревшей кодировке. Y2Fm6Q== читается как caf� в UTF-8 и как café в ISO-8859-1 или Windows-1252. Русскому тексту вроде z/Do4uXy нужна Windows-1251, чтобы показать Привет.
  • Точка или пропуск после каждой буквы. Это UTF-16, где за ASCII-буквами идёт нулевой байт. SABlAGwAbABvAA==, например, даёт Hello в UTF-16LE (Base64 в UTF-16).
  • é, ü или ’ в результате. Декодирование правильное: текст был закодирован дважды ещё до превращения в Base64 (байты UTF-8 прочитали как Latin-1 и снова сохранили в UTF-8). Y2Fmw4PCqQ== декодируется ровно в café. Исправлять нужно в источнике.

Автоопределение проверяет наличие метки порядка байтов, затем корректность UTF-8, затем шаблон нулевых байтов UTF-16. Однобайтовые кодовые страницы вроде Windows-1251 и KOI8-R для любого детектора выглядят одинаково, поэтому, если вы знаете источник, выбирайте их вручную.

Сообщения об ошибках и что они значат

СообщениеОбычная причинаЧто делать
Недопустимый символ “.” в позиции 21Вставлен JWT целиком: точки разделяют три частиДекодируйте одну часть или используйте декодер JWT
Недопустимый символ "\\" в позиции 8Base64 скопирован из JSON, где / экранирован как \/Замените \/ на /
Во входных данных смешаны символы стандартного (+ /) и URL-safe (- _) алфавитовСклеены две строки или конвертация сделана наполовинуПриведите к одному алфавиту через Base64URL в Base64
Дополнение (=) может стоять только в самом концеСклеены два значения Base64, например SGk=SGk=Разделите их и декодируйте по отдельности
Неверная длина: на один символ больше или меньше, чем нужноПри копировании потерялся или добавился символСкопируйте заново или попробуйте исправить Base64

Каждый случай подробнее разобран в руководстве по ошибкам Base64. Найти, в каком именно символе или в дополнении ошибка, поможет валидатор Base64.

Декодирование Base64 в JavaScript, Python и командной строке

atob() возвращает «двоичную строку» по символу на байт, поэтому для текста в UTF-8 нужен ещё шаг с TextDecoder. atob принимает строки без дополнения, но выбрасывает InvalidCharacterError на URL-safe - и _.

const s = "R3LDvMOfZSDwn5GL";
new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
// "Grüße 👋"

// Node.js accepts both alphabets
Buffer.from(s, "base64").toString("utf8");          // "Grüße 👋"
Buffer.from("8J-Riw", "base64url").toString("utf8"); // "👋"

Python выбрасывает binascii.Error: Incorrect padding на входе без дополнения, так что допишите его сами:

import base64

s = "SGVsbG8"
base64.b64decode(s + "=" * (-len(s) % 4)).decode("utf-8")
# 'Hello'
base64.b64decode("SGVs*bG8=", validate=True)
# binascii.Error: Only base64 data is allowed

Без validate=True Python молча отбрасывает * и возвращает b'Hello'. Buffer.from в Node ведёт себя так же, так что повреждённая строка может декодироваться без всякой ошибки.

В командной строке:

printf '%s' 'R3LDvMOfZSDwn5GL' | base64 -d
base64 -d message.b64 > message.bin

Первая строка выводит Grüße 👋. В старых версиях macOS флаг пишется как -D. Подробнее по языкам: JavaScript, Node.js, Python, PHP.

Вопросы и ответы

Как декодировать строку Base64?

Вставьте её в поле ввода выше, и декодированный текст появится сразу. В коде декодируйте Base64 в байты, а затем прочитайте байты как UTF-8: base64.b64decode(s).decode() в Python, Buffer.from(s, "base64").toString() в Node.js.

Почему в декодированном тексте странные символы вроде � или é?

� означает, что байты не складываются в корректный UTF-8: текст, скорее всего, был в другой кодировке; попробуйте Windows-1252, Windows-1251 или UTF-16LE в меню «Кодировка». é вместо é значит, что текст был испорчен ещё до того, как его закодировали.

Можно ли декодировать Base64 без дополнения =?

Да. Декодер сам допишет недостающие = и сообщит об этом в строке статуса. Дополнение лишь заполняет последний блок, поэтому его всегда можно восстановить по длине.

На выходе абракадабра. Base64 испорчен?

Чаще это файл, а не текст. Посмотрите на поле «Похоже на» в строке статуса: для картинок, PDF, архивов и других двоичных форматов инструмент даёт ссылку на декодер, который покажет или сохранит файл.

Можно ли расшифровать Base64 без ключа?

Всегда. Base64 всего лишь кодировка с публичным алфавитом, никакой секретности она не даёт. Если декодированный результат по-прежнему выглядит случайным, данные зашифровали или сжали до кодирования.