Какую текстовую схему кодирования Вы используете, когда у Вас есть двоичные данные, которые необходимо отправить по каналу ASCII?

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

Я знаю о:

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

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

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

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

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

7
задан Community 23 May 2017 в 12:32
поделиться

4 ответа

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

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

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

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

Отредактируйте: Как указывало @paul, указывающую, есть модифицированная версия базы , которая является «url Safe» (и, я предполагаю, что «безопасный для cookie»). Использование модифицированной версии стандартного алгоритма, скорее разбавляет его очарование, разумейте вас.

Редактировать : @Shoosh указал, что = используется только для обозначения конца строки Base64, поэтому вы можете обрезать = , установите файл cookie, Затем присоединитесь снова = , когда вам нужно декодировать его.

13
ответ дан 6 December 2019 в 09:19
поделиться

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

4
ответ дан 6 December 2019 в 09:19
поделиться

Я думаю, что необходимо настроить функцию compilation-parse-errors-filename-function , которая принимает имя файла и возвращает измененную версию отображаемого имени файла. Это локальная переменная буфера, поэтому вы должны установить ее в каждом буфере, который будет отображать ошибки python (вероятно, есть подходящий крюк для использования, у меня нет режима python установлен, поэтому я не могу искать его). Используйте propertize для возврата версии входного имени файла, которая действует как гиперссылка для загрузки фактического файла. propertize хорошо документирован в руководстве elisp.

Если функция compilation-parse-errors-filename-name не вызывается, то необходимо добавить список в compilation-error-regexp-alist-alist (то есть alist-alist, это не опечатка), который представляет собой список имен режимов, за которыми следуют регулярные выражения, соответствующие ошибкам, и числовые индексы соответствующего номера строки.

-121--3013635-

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

-121--3823425-
  • uuencode является популярным является некоторые круги
  • HTML и XML кодировать Юникод с использованием этот синтаксис

Base64 де-факто стандарт. Использовать все остальное - это просить неприятностей.

1
ответ дан 6 December 2019 в 09:19
поделиться

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

2
ответ дан 6 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: