Какую схему кодирования текста вы используете, когда у вас есть двоичные данные, которые нужно отправить по каналу ascii? - PullRequest
7 голосов
/ 19 января 2010

Если у вас есть двоичные данные, которые нужно кодировать, какую схему кодирования вы используете?

Я знаю о:

  • Шестнадцатеричное кодирование .Очень простой, но довольно многословный, расширяет один байт до двух.
  • Base 64 .Наиболее распространенный, но не столь многословный, расширяет три байта до четырех.
  • База 85 .Не часто, но менее многословно, расширяет четыре байта до пяти.

Существуют ли какие-либо другие схемы кодирования общего пользования?Если да, какие есть преимущества и недостатки?

Редактировать : Это полезно, например, при попытке сохранить произвольные данные в файле cookie.Куки могут хранить только текст, а не произвольные данные, поэтому вам нужно каким-то образом преобразовать их, желательно с возможностью конвертировать обратно.Далее, предположим, что вы используете сервер без сохранения состояния, поэтому вы не можете сохранить состояние на сервере и просто поместите идентификатор в файл cookie.Конечно, если вы сделаете это, вам также потребуется какой-то способ проверить, что то, что пользователь передает вам, является тем, что вы передали пользователю, например, подпись.

Кроме того, поскольку текущий консенсусчто вы должны использовать base64, поскольку он широко распространен, я также укажу, что это - это , что я использую ... Мне просто любопытно, если кто-нибудь использовал что-нибудь еще, и если да, то почему.

Редактировать : На всякий случай, если кто-то наткнется на это, если вы хотите использовать Base64 для хранения данных в файле cookie, вам нужно использовать модифицированную реализацию Base64 .См. этот ответ по причине.

Ответы [ 4 ]

13 голосов
/ 19 января 2010

Для кодирования значений cookie вы должны быть осторожны. Смотрите этот старый ответ :

При использовании файлов cookie версии 0 значения должны не содержать пробелов, скобок, * круглые скобки равны знакам , запятые, двойные кавычки, косые черты, вопрос знаки на знаках, двоеточиях и точка с запятой. Пустые значения не могут ведут себя одинаково во всех браузерах.

Кодировка Base64 может генерировать символы = для определенных входных данных, и это технически запрещено в файлах cookie (файлы cookie версии 0, во всяком случае, которые наиболее широко поддерживаются). На практике я подозреваю, что = будет работать нормально, но, возможно, нет.

Я бы предложил, чтобы быть абсолютно уверенным, что ваш закодированный двоичный файл совместим с cookie, тогда базовое шестнадцатеричное кодирование является наиболее безопасным (например, в java ).

edit: Как любезно указал @Paul, существует модифицированная версия Base 64 , которая является «безопасной URL» (и, я полагаю, «безопасной cookie»). Заметьте, что использование модифицированной версии стандартного алгоритма скорее разбавляет его очарование.

edit : @shoosh указал, что = используется только для обозначения конца строки base64, так что вы можете обрезать =, установить cookie, затем снова присоединить = снова, когда вам нужно декодировать его.

4 голосов
/ 19 января 2010

Base64 выигрывает, потому что это так часто, что мне не нужно беспокоиться о том, чтобы развернуть свой собственный кодер / декодер. Я не сталкивался ни с какими приложениями, в которых меня беспокоило сохранение полосы пропускания или файлового пространства в закодированных двоичных данных.

2 голосов
/ 19 января 2010

Когда-то был UTF-7. Это официально устарело, но все еще работает как ACE (ASCII-совместимое кодирование). Теперь есть IDN .

1 голос
/ 19 января 2010

Base64 являетсяде-факто стандарт.Использование чего-либо еще вызывает проблемы.

...