Ошибки подготовки
Ошибка первая — неверная кодировка исходника. Файл в Windows-1251, закодированный как UTF-8, даст «кракозябры» вместо кириллицы. Лечится пересохранением исходника в UTF-8 до кодирования.
Ошибка вторая — невидимый мусор: BOM в начале файла, пробелы в конце строк, «умные» кавычки из Word. Всё это честно кодируется, а потом всплывает в самый неподходящий момент. Чистите исходник заранее.
Ошибка третья — кодирование уже закодированного. Двойной Base64 не добавляет защиты, только раздувает объём и путает всех, кто будет это читать. Если не уверены — декодируйте один раз и посмотрите, что получилось.
Ошибки строки
Ошибка четвёртая — грязь при копировании: пробелы, переносы строк, HTML-сущности вроде &, попавшие из веб-страницы или чата. Декодер на это ругается. Решение — очистить строку до чистого алфавита: буквы, цифры, «+», «/» и «=» в конце.
Ошибка пятая — обрезанная строка. Длинные Base64-значения режут лимиты полей баз данных, чаты и формы. Обрезанная строка не декодируется в принципе: длина обязана быть кратной четырём. Проверяйте лимиты принимающей стороны заранее.
Ошибка шестая — перепутанный алфавит: обычная строка отправлена системе, ждущей URL-safe вариант, или наоборот. Символы «+» и «/» против «-» и «_» — мелочь, из-за которой всё ломается. Всегда уточняйте, какой вариант ждёт принимающая сторона.
Ошибка понимания
Ошибка седьмая — вера в то, что Base64 защищает данные. Это не шифрование: любой декодер прочитает строку за секунду. Пароли, ключи и токены, «спрятанные» в Base64 и выложенные в открытый доступ, — это скомпрометированные пароли, ключи и токены.
Запомните простое правило: Base64 отвечает на вопрос «как передать», а не «как скрыть». Для секретов — шифрование, для передачи двоичных данных текстом — Base64.
Итоговый чек-лист против всех семи ошибок: UTF-8, чистый исходник, без двойного кодирования, чистая строка без мусора, проверка лимитов длины, правильный алфавит и никакого «шифрования». Пройдитесь по нему один раз — и ошибки исчезнут как класс.
Мини-тест: проверьте себя
Ответьте на три вопроса. Первый: вы закодировали русский текст, а после декодирования — «кракозябры». Ваше первое действие? Правильный ответ: проверить кодировку исходника, он наверняка не в UTF-8.
Второй: строка не декодируется, декодер ругается на недопустимый символ. Что делаете? Правильно: ищете мусор от копирования — пробелы, переносы, HTML-сущности — и чистите строку до чистого алфавита.
Третий: коллега предлагает «зашифровать» пароль через Base64. Ваш ответ? Категорическое «нет»: это кодирование, а не шифрование, и пароль будет скомпрометирован. Три из трёх — вы готовы к работе с Base64 без ошибок.
Распечатайте чек-лист из семи пунктов и держите рядом, пока он не станет автоматизмом. Ошибки любят спешку — а чек-лист любит внимательность.
Опыт приходит с ошибками, но умный учится на чужих: теперь семь чужих ошибок — ваши семь усвоенных уроков.
Частые вопросы
Декодер пишет «invalid character». Что делать?
В строке есть посторонние символы: пробелы, переносы, HTML-сущности. Удалите всё, кроме букв, цифр, «+», «/» и «=» в конце, и попробуйте снова.
Строка декодируется, но текст — «кракозябры». Почему?
Исходник кодировали не в UTF-8. Найдите оригинал, пересохраните в UTF-8 и закодируйте заново — «починить» уже закодированную строку нельзя.
Можно ли восстановить обрезанную Base64-строку?
Нет. Потерянные символы — это потерянные данные. Единственный путь — взять исходник и закодировать заново, убедившись, что принимающая сторона не обрежет результат.