Как перевести Base64 в текст
- Вставьте строку Base64 в поле Ввод · Base64. Пробелы, переносы строк и кавычки вокруг не мешают.
- Прочитайте текст в поле Результат · текст. Строка статуса под инструментом показывает, был ли ввод корректным Base64, сколько в нём байтов и на что похоже содержимое.
- Если в результате видны
�или странные буквы, выберите другую кодировку в поле Кодировка. Автоопределение ищет метку порядка байтов, UTF-8 и UTF-16. - Скопируйте текст кнопкой Скопировать результат или сохраните его кнопкой Скачать.
Обратное направление: текст в Base64.
Как понять, что строка закодирована в Base64
Строка Base64 использует только 64 символа плюс = для дополнения. В стандартном Base64 есть + и /, а URL-safe вариант использует вместо них - и _. Длина строки с дополнением делится на 4, а знаки = могут стоять только в конце.
Эти правила необходимы, но недостаточны. Их проходит множество обычных слов. Test, например, корректный Base64: он декодируется в три байта 4D EB 2D, которые ничего не значат. На практике проще декодировать строку и посмотреть, получилось ли что-то осмысленное. Если нужен не только ответ «да» или «нет», валидатор Base64 покажет, какое правило для символов, длины или дополнения нарушает строка, и оценит, насколько вероятно, что это вообще Base64.
Примеры
| Строка Base64 | Текст | Примечание |
|---|---|---|
VGhhbmsgeW91IQ== | Thank you! | Обычный ASCII |
SGVsbG8sIFfDtnJsZA== | Hello, Wörld | ö в UTF-8 занимает два байта |
5L2g5aW9 | 你好 | Шесть байтов, по три на символ |
0J/RgNC40LLQtdGC | Привет | Кириллица в UTF-8 |
QmFzZTY0IGlzIG5vdCBlbmNyeXB0aW9uLg== | Base64 is not encryption. | Прочитать может кто угодно |
dXNlcm5hbWU6c2VjcmV0 | username:secret | Формат заголовка HTTP Basic auth |
Последняя строка напоминает, что пароль в заголовке Authorization: Basic только закодирован, но не защищён. Декодер Basic Auth разбивает такой заголовок на пользователя и пароль, а статья кодирование и шифрование объясняет, почему на самом деле его защищает HTTPS.
От байтов к строке
Декодирование Base64 даёт байты. Чтобы получить из них строку, нужен второй шаг с кодировкой, и именно на нём возникает большинство проблем с «неправильным текстом». В большинстве языков эти два шага разделены явно:
import base64
raw = base64.b64decode("SGVsbG8sIFfDtnJsZA==")
raw # b'Hello, W\xc3\xb6rld'
raw.decode("utf-8") # 'Hello, Wörld'
raw.decode("latin-1") # 'Hello, Wörld'
В JavaScript TextDecoder с fatal: true выбрасывает TypeError вместо того, чтобы молча вставить �. Это полезно, когда лучше упасть, чем сохранить битый текст:
const bytes = Uint8Array.from(atob("Y2Fm6Q=="), c => c.charCodeAt(0));
new TextDecoder("utf-8", { fatal: true }).decode(bytes);
// TypeError: the bytes are not valid UTF-8
new TextDecoder("windows-1252").decode(bytes); // "café"
Больше приёмов на страницах Python и JavaScript.
Если результат не похож на текст
- В основном символы и несколько читаемых слов. В строке лежит файл. Посмотрите на поле Похоже на в строке статуса, а затем откройте его в Base64 в файл: там можно посмотреть превью и сохранить файл.
- Буквы через пробел. Текст в UTF-16. Выберите в поле Кодировка UTF-16LE.
- Текст читается, но
éвыглядит какé. Текст неправильно декодировали где-то ещё до кодирования в Base64. С самим Base64 всё в порядке, проблема в исходных данных. Кириллица в таком случае превращается вÐ,Ñи похожие символы. - Результат снова в Base64. Значит, данные закодировали дважды. Скопируйте результат, вставьте его в поле ввода и декодируйте ещё раз.
- Случайные на вид байты, формат не определён. Скорее всего, данные зашифрованы или сжаты. Декодирование Base64 снимает только первый слой; для данных gzip или zlib попробуйте декодер gzip Base64.
Вопросы и ответы
Что такое строка Base64?
Текст только из символов A–Z, a–z, 0–9, + и /, часто с = или == в конце. Он хранит байты (текст, картинку или любой другой файл), записанные так, чтобы пережить системы, которые понимают только простые символы.
Как понять, что лежит в строке Base64, до декодирования?
Часто это видно по первым символам: eyJ у JSON, PD94bWwg у XML, iVBORw0KGgo у PNG, JVBERi0 у PDF. После декодирования строка статуса называет определённый формат. Подробнее: распространённые префиксы Base64.
Как перевести Base64 в строку в Python?
base64.b64decode(s).decode("utf-8"). Первый вызов возвращает байты, а .decode() превращает их в str в указанной вами кодировке.
Почему после декодирования снова получается Base64?
Значение закодировали дважды. Так бывает, когда два слоя системы кодируют его каждый по отдельности. Вставьте результат обратно в поле ввода и декодируйте ещё раз.