Как декодировать Base64 в ASCII
- Вставьте Base64 в поле Ввод · Base64. В поле Кодировка уже выбран ASCII.
- Прочитайте текст в поле Результат · текст. Каждый байт больше 127 показан как
�. - Если видите
�, в содержимом есть байты не из ASCII. Выберите в поле Кодировка UTF-8 или Windows-1252, чтобы его прочитать. - Нажмите Скопировать результат или Скачать, чтобы сохранить декодированные байты.
Чтобы закодировать текст обратно в Base64, используйте ASCII в Base64.
Строгое декодирование ASCII
Многие инструменты молча читают байты больше 127 в какой-нибудь 8-битной кодировке, и байт не из ASCII превращается в правдоподобную букву, которую никто не замечает. Эта страница так не делает. ASCII заканчивается на 127, и любой байт от 128 до 255 показан символом замены. Сколько в результате символов �, столько и байтов не из ASCII.
Поэтому страница подходит для быстрой проверки перед тем, как отдавать декодированные данные системе, которая принимает только ASCII. Буква с диакритикой в UTF-8 занимает два байта и выглядит как ��, кириллическая буква тоже, а типографская кавычка занимает три байта и выглядит как ���.
Примеры
| Base64 | Байты (hex) | Как ASCII |
|---|---|---|
QVNDSUk= | 41 53 43 49 49 | ASCII |
MjAwIE9L | 32 30 30 20 4F 4B | 200 OK |
YQli | 61 09 62 | a, табуляция, b |
Y2Fmw6k= | 63 61 66 C3 A9 | caf�� (UTF-8 café) |
4oCcaGnigJ0= | E2 80 9C 68 69 E2 80 9D | ���hi��� (UTF-8 “hi”) |
Две последние строки правильно декодируются, если выбрать UTF-8 в поле Кодировка. Поле Похоже на в строке статуса и в режиме ASCII называет формат, так что PNG или PDF распознаются; вернитесь на UTF-8, и инструмент даст ссылку на подходящий декодер файлов.
Как ASCII выглядит в Base64
У ASCII-текста узнаваемая форма в Base64. Все байты меньше 80, поэтому первый символ каждой группы из 4 символов лежит в диапазоне A–f и никогда не бывает g–z, цифрой, + или /. При этом позиции символов не соответствуют друг другу один к одному: 3 символа ASCII всегда превращаются в 4 символа Base64, и подстроку, которая не начинается на границе группы из 4 символов, декодировать нельзя.
Если нужен код каждого символа, а не сам текст, до значений байтов один шаг: QVNDSUk= в десятичной записи выглядит как 65 83 67 73 73. Их выводят Base64 в десятичные числа и Base64 в hex, а Base64 в двоичный код показывает биты.
Base64 в ASCII в коде
import base64
base64.b64decode("QVNDSUk=").decode("ascii") # 'ASCII'
base64.b64decode("Y2Fmw6k=").decode("ascii")
# UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3
list(base64.b64decode("QVNDSUk=")) # [65, 83, 67, 73, 73]
В JavaScript здесь есть ловушка: по стандарту WHATWG Encoding new TextDecoder("ascii") означает Windows-1252, поэтому Y2Fm6Q== он декодирует как café и никогда не сообщает о байтах не из ASCII. Проверяйте байты сами, например через bytes.every(b => b < 128). Подробнее в статьях Base64 в JavaScript и Base64 в Python.
Вопросы и ответы
Как перевести Base64 в ASCII-текст?
Вставьте Base64 в поле выше. Каждый декодированный байт от 0 до 127 показывается своим символом ASCII. В Python то же делает base64.b64decode(s).decode("ascii"), и на любом байте больше 127 он выбросит ошибку.
Откуда в результате символы �?
Эти байты не относятся к ASCII. Обычно это текст в UTF-8 с буквами с диакритикой, кириллицей, типографскими кавычками или эмодзи; выберите UTF-8 в поле Кодировка, чтобы его прочитать. Если почти весь результат состоит из �, скорее всего, внутри файл.
Как получить коды ASCII в виде чисел?
Для десятичных значений байтов вроде 65 83 67 73 73 используйте Base64 в десятичные числа, а для 41 53 43 49 49 подойдёт Base64 в hex.
Может ли ASCII-текст содержать невидимые символы?
Да: табуляция, возврат каретки, перевод строки и другие управляющие коды 0–31 входят в ASCII. Они декодируются как обычно, так что табуляция между словами останется табуляцией.