Кодировщик и декодер Base91

Преобразуйте текст, шестнадцатеричные байты или файлы в basE91 и обратно. basE91 упаковывает двоичные данные в 91 печатный символ ASCII и даёт более короткий результат, чем Base64 или Base85.

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Выберите «Кодировать», чтобы превратить текст или байты в basE91, или «Декодировать», чтобы получить данные из basE91.
  2. Введите или вставьте исходные данные либо откройте файл. Для необработанных байтов переключите формат ввода на Hex.
  3. Результат обновляется по мере ввода. При декодировании выберите формат вывода «Текст» или Hex.
  4. Скопируйте результат или скачайте его в виде файла.

Что такое basE91?

basE91 — это способ представления двоичных данных в виде текста, разработанный Иоахимом Хенке (Joachim Henke). Он использует 91 из 95 печатных символов ASCII: все, кроме пробела, апострофа ', дефиса - и обратной косой черты \.

Он не работает с блоками байтов фиксированного размера. Кодировщик накапливает биты входных данных в буфере и берёт их по 13 за раз. Если 13-битное значение больше 88, оно записывается двумя символами. Если оно не больше 88, берётся ещё и 14-й бит, и значение всё равно помещается, потому что два символа с основанием 91 могут выразить 91 × 91 = 8281 различное значение. Таким образом, каждые 13 или 14 бит превращаются ровно в 2 символа.

В результате накладные расходы составляют не более 23%, а для данных с длинными последовательностями нулевых байтов снижаются примерно до 14%. Для случайных или сжатых данных они близки к верхней границе.

Сравнение basE91 с другими кодировками

КодировкаСимволовРазмер результата
Hex162 × исходный размер
Base5858около 1,37 × исходный размер
Base64641,33 × исходный размер
Base85 / Ascii85851,25 × исходный размер
basE9191примерно от 1,14 до 1,23 × исходный размер

Чтобы сравнить реальную длину результата для ваших данных, введите их на странице Все кодировки.

Что нужно учитывать

  • Экранирование. Алфавит содержит двойную кавычку ", которую нужно экранировать в JSON и в большинстве строковых литералов, а также <, > и &, которые нужно экранировать в HTML и XML. basE91 небезопасен для URL.
  • Декодируйте строку целиком. Биты переходят через границы символов, поэтому фрагмент, вырезанный из середины строки basE91, нельзя декодировать отдельно.
  • Поддержка. basE91 не является стандартом IETF. Автор публикует эталонные реализации на C и других языках, и для большинства платформ существуют порты, например пакет base91 для Python.

Спецификация

Алфавит91 печатный символ ASCII
Размер результатаОколо 123%
ДополнениеНет
СтандартbasE91 (Joachim Henke)
Учёт регистраДа

Примеры

Исходные данные (UTF-8)Результат
Hello, World!>OwJh>}AQ;r@@Y?F
Base64.isxD7gXm^?t#5
你好I_5k7aPE

Часто задаваемые вопросы

Компактнее ли basE91, чем Base64?

Да. Base64 всегда добавляет 33%, а basE91 — не более 23%, а для данных с большим количеством нулевых байтов ещё меньше. Для файла размером 1 МБ это примерно 100 КБ экономии.

Какие символы использует basE91?
Буквы A-Z и a-z, цифры 0-9 и символы !#$%&()*+,./:;<=>?@[]^_`{|}~". Пробел, апостроф, дефис и обратная косая черта не используются.
Почему название пишется как basE91?

Так название пишет сам автор. basE91 и Base91 обозначают одну и ту же кодировку, и эта страница следует оригинальному алгоритму.

Мешают ли пробельные символы декодированию?

Нет. Пробелы и переводы строк не входят в алфавит, поэтому декодер на этой странице их игнорирует. Текст basE91 с переносами строк можно вставлять напрямую.