Base64: двоичные данные в виде простого текста
Некоторые места принимают только простой текст: почта, JSON, атрибуты HTML. Base64 превращает любые данные в 64 безопасных символа (A–Z, a–z, 0–9, + и /), чтобы они проходили через них без изменений. «Hello» превращается в SGVsbG8=.
- Каждые 3 байта становятся 4 символами, поэтому Base64 примерно на 33% больше оригинала.
- Знаки = в конце дополняют результат до длины, кратной 4 символам.
- Вариант, безопасный для URL, использует - и _ вместо + и /, которые имеют особый смысл в веб-адресах.
Это не шифрование
Раскодировать Base64 может кто угодно; ключа нет. Никогда не используйте его, чтобы скрыть пароль или другой секрет.
Data URI
Небольшое изображение можно записать прямо в HTML или CSS как data:image/png;base64,, а за ним его текст Base64, сэкономив отдельную загрузку. Из-за увеличения размера это имеет смысл только для маленьких значков. Изображение в Base64 создаст data URI за вас или превратит его обратно в изображение.
URL-кодирование — другое
URL-кодирование (процентное) заменяет только символы, которые недопустимы или имеют особый смысл в веб-адресе, — каждый на % и значение его байта. «café & crème» превращается в caf%C3%A9%20%26%20cr%C3%A8me: пробел — %20, & — %26, а é, два байта в UTF-8, — %C3%A9. Кириллица кодируется так же: каждая буква — два байта, «я» — %D1%8F. Всё остальное остаётся читаемым.
Кодируйте и декодируйте текст в Base64: кодирование и декодирование и URL: кодирование и декодирование.
Кодирование трёх букв вручную
Возьмём слово Man. Его три байта — 77, 97 и 110, или 01001101 01100001 01101110 в двоичном виде. Base64 перегруппировывает эти 24 бита в четыре группы по шесть:
010011 010110 000101 101110
19 22 5 46
T W F u
Каждое шестибитное число выбирает символ из алфавита A–Z, a–z, 0–9, + и /, так что Man становится TWFu. Когда длина входа не кратна трём байтам, конец дополняется знаками =.
Насколько он увеличивается
Изображение в 30 КБ становится примерно 40 КБ в Base64. Поэтому data URI подходят для иконок в несколько килобайт, но не для фотографий.
Частые проблемы
- Декодирование длинного текста не удаётся. Почта и некоторые инструменты вставляют перевод строки каждые 76 символов. Удалите переводы строк перед декодированием.
- Символы - или _ отвергаются. В тексте используется URL-безопасный алфавит. Замените - на + и _ на / или используйте декодер, принимающий оба.
- Нет = в конце. Некоторые системы отбрасывают дополнение. Добавляйте знаки =, пока длина не станет кратна четырём.
- В декодированном тексте странные символы. Исходный текст был в другой кодировке. Большинство текста сегодня в UTF-8; попробуйте сначала её, а для старых русских текстов — Windows-1251.