Отделите транспортное представление от формата данных
Base64, ASCII85, Base91 и шестнадцатеричное экранирование лишь делают байты пригодными для текстового канала; Avro, CBOR и Protobuf определяют структуру самих данных.
Elysia Tools
Навигация
Workflow Playbook
Преобразуйте структурированные данные между двоичными форматами сериализации, текстовыми транспортными кодировками и экранированными представлениями с проверяемым обратным преобразованием.
Темы
Главная ошибка при работе с двоичными сообщениями состоит в том, что текстовую оболочку принимают за формат данных. Сначала зафиксируйте источник, границы сообщения и ожидаемого потребителя: структурированные значения сериализуются в байты, а байты иногда дополнительно упаковываются Base64, ASCII85, Base91 или шестнадцатеричным экранированием. Каждый уровень нужно сохранять отдельно, особенно если внутренний формат ещё не подтверждён документацией.
Подготовьте повторяемый эталонный образец. В нём должны быть обычный текст, символы вне ASCII, дробные числа, null, нулевые байты, вложенные объекты и массивы. Запишите исходную длину и несколько контрольных шестнадцатеричных фрагментов: они помогут отличить ошибку сериализации от ошибки доставки.
Если протокол явно называет внешнее представление, примените соответствующий преобразователь и получите исходные байты. Когда источник неясен, сохраняйте доказательства и проверяйте полноту кандидата, а не делайте вывод по одному набору символов. Успешное декодирование Base64 ещё не говорит, что внутри находится JSON: там может быть Protobuf, CBOR или прикладной двоичный кадр.
Внутренний формат выбирают только после анализа байтов, документации отправителя, типа содержимого, schema или кода получателя. Для форматов со schema версия, номера полей и значения по умолчанию являются частью контракта. Их нельзя заменять догадками при конвертации.
Преобразуйте эталонный образец в целевой формат и восстановите его обратно в проверяемое представление. Сначала сравните бизнес-смысл: наличие полей, типы, точность чисел, Unicode, null, порядок массивов и вложенность. Затем проверьте границы: длину сообщения, нулевые байты, двоичные поля и контрольные фрагменты. Если формат допускает несколько эквивалентных кодировок, заранее определите правило сравнения, а не требуйте побитового совпадения там, где оно не гарантируется.
После этого заново примените требуемую транспортную оболочку и немедленно декодируйте результат. Такая последняя проверка отделяет ошибку выбора сериализации от ошибки текстовой упаковки и оставляет воспроизводимую цепочку для расследования.
Успех нельзя определять только отсутствием ошибки в конвертере. Целевой потребитель или совместимый декодер должен прочитать результат; сохраните образец, версию schema, формат, способ упаковки, длину и итог сравнения. Частые проблемы: принятие Base64 за внутренний формат, потеря номера поля Protobuf, повторное текстовое кодирование двоичного поля или двойная транспортная упаковка без требования канала.
Если получатель отклоняет сообщение, возвращайтесь к последнему подтверждённому уровню: проверьте полноту оболочки, соответствие schema и поддержку формата, затем сократите вход до минимального воспроизводимого образца. Чёткая запись трёх уровней надёжнее случайного перебора конвертеров.
Руководство по рабочему процессу
По протоколу источника или признакам образца выберите корректный преобразователь текста в байты; при неопределённости фиксируйте гипотезу, а не угадывайте формат.
Кодируйте или декодируйте данные в формате, который реально поддерживает получатель; для Avro и Protobuf сохраняйте schema, номера полей и версию вместе с образцом.
Восстановите данные из нового формата и сравните поля, точность чисел, Unicode, null, вложенные коллекции, длину и критичные байты; различия возвращают вас к выбору формата или schema.
Применяйте текстовую оболочку только когда её требует канал, затем сразу декодируйте итог и подтверждайте соответствие уже проверенным внутренним байтам.
Base64, ASCII85, Base91 и шестнадцатеричное экранирование лишь делают байты пригодными для текстового канала; Avro, CBOR и Protobuf определяют структуру самих данных.
Если получателю нужны строгая schema, номера полей или правила эволюции, используйте совместимый формат; внешний вид строки Base64 сам по себе не определяет сериализацию внутри.
Format Conversion
Кодирует и декодирует данные в/из формата Base64 с опциями URL-safe