Какую схему кодирования текста вы используете, когда у вас есть двоичные данные, которые вам нужно отправить по каналу ascii?
Вопрос
Если у вас есть двоичные данные, которые вам нужно закодировать, какую схему кодирования вы используете?
Я знаю о:
- Шестнадцатеричная кодировка.Очень просто, но довольно многословно, расширяет один байт до двух.
- База 64.Самый распространенный, не такой многословный вариант, расширяет три байта до четырех.
- База 85.Необычно, опять же менее многословно, расширяет четыре байта до пяти.
Существуют ли другие широко используемые схемы кодирования?Если да, то каковы преимущества и недостатки?
Редактировать:Это полезно, например, при попытке сохранить произвольные данные в файле cookie.Файлы cookie могут хранить только текст, а не произвольные данные, поэтому вам необходимо каким-то образом преобразовать их, желательно с возможностью обратного преобразования.Далее предположим, что вы используете сервер без сохранения состояния, поэтому вы не можете сохранить состояние на сервере и просто помещаете идентификатор в файл cookie.Конечно, если вы сделаете это, вам также понадобится какой-то способ проверить, что то, что пользователь передает вам, — это то, что вы передали пользователю, например подпись.
Кроме того, поскольку в настоящее время существует мнение, что вам следует использовать base64, поскольку он широко распространен, я также отмечу, что это является чем я пользуюсь...Мне просто любопытно, использовал ли кто-нибудь что-нибудь еще, и если да, то почему.
Редактировать:На всякий случай, если кто-то наткнется на это, если вы хотите использовать Base64 для хранения данных в файле cookie, вам нужно использовать модифицированная реализация Base64.Видеть этот ответ по той причине, почему.
Решение
При кодировании значений файлов cookie необходимо соблюдать осторожность.Видеть это старый ответ:
С файлами cookie версии 0 значения не должны содержать белое пространство, кронштейны, скобки, знаки равенства, запятые, двойные цитаты, удары, вопросы вопроса, в знаках, колоне и полуколонах.Пустые значения могут не вести себя одинаково для всех браузеров.
Кодировка Base64 может генерировать =
символы для определенных входных данных, и это технически не разрешено в файлах cookie (во всяком случае, файлы cookie версии 0, которые поддерживаются наиболее широко).На практике я подозреваю, что =
на самом деле будет работать нормально, но, возможно, и нет.
Я бы посоветовал, чтобы быть абсолютно уверенным, что ваш закодированный двоичный файл совместим с файлами cookie, тогда наиболее безопасным является базовое шестнадцатеричное кодирование (например, в Яве).
редактировать: Как любезно отметил @Paul, существует модифицированная версия Base 64 это «безопасно для URL» (и, я полагаю, «безопасно для файлов cookie»).Заметьте, использование модифицированной версии стандартного алгоритма несколько ослабляет его очарование.
редактировать:@shoosh отметил, что =
используется только для обозначения конца строки base64, поэтому вы можете обрезать =
, установите файл cookie, затем повторно прикрепите =
снова, когда вам нужно его декодировать.
Другие советы
Base64 побеждает, потому что он настолько распространен, что мне не нужно беспокоиться о развертывании собственного кодера/декодера.Я не сталкивался ни с одним приложением, в котором меня беспокоила бы экономия пропускной способности или файлового пространства в закодированных двоичных данных.
Когда-то была UTF-7.Официально он устарел, но по-прежнему работает как ACE (кодировка, совместимая с ASCII).Теперь есть ИДИ.
- uuencode популярен в некоторых кругах
- HTML и XML кодируют Юникод, используя этот синтаксис
Base64 является стандартом де-факто.Использование чего-либо еще вызывает проблемы.