Как пользоваться
- Выберите «Кодировать», чтобы превратить текст или байты в basE91, или «Декодировать», чтобы получить данные из basE91.
- Введите или вставьте исходные данные либо откройте файл. Для необработанных байтов переключите формат ввода на Hex.
- Результат обновляется по мере ввода. При декодировании выберите формат вывода «Текст» или Hex.
- Скопируйте результат или скачайте его в виде файла.
Что такое basE91?
basE91 — это способ представления двоичных данных в виде текста, разработанный Иоахимом Хенке (Joachim Henke). Он использует 91 из 95 печатных символов ASCII: все, кроме пробела, апострофа ', дефиса - и обратной косой черты \.
Он не работает с блоками байтов фиксированного размера. Кодировщик накапливает биты входных данных в буфере и берёт их по 13 за раз. Если 13-битное значение больше 88, оно записывается двумя символами. Если оно не больше 88, берётся ещё и 14-й бит, и значение всё равно помещается, потому что два символа с основанием 91 могут выразить 91 × 91 = 8281 различное значение. Таким образом, каждые 13 или 14 бит превращаются ровно в 2 символа.
В результате накладные расходы составляют не более 23%, а для данных с длинными последовательностями нулевых байтов снижаются примерно до 14%. Для случайных или сжатых данных они близки к верхней границе.
Сравнение basE91 с другими кодировками
| Кодировка | Символов | Размер результата |
|---|---|---|
| Hex | 16 | 2 × исходный размер |
| Base58 | 58 | около 1,37 × исходный размер |
| Base64 | 64 | 1,33 × исходный размер |
| Base85 / Ascii85 | 85 | 1,25 × исходный размер |
| basE91 | 91 | примерно от 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.is | xD7gXm^?t#5 |
你好 | I_5k7aPE |
Часто задаваемые вопросы
Компактнее ли basE91, чем Base64?
Да. Base64 всегда добавляет 33%, а basE91 — не более 23%, а для данных с большим количеством нулевых байтов ещё меньше. Для файла размером 1 МБ это примерно 100 КБ экономии.
Какие символы использует basE91?
A-Z и a-z, цифры 0-9 и символы !#$%&()*+,./:;<=>?@[]^_`{|}~". Пробел, апостроф, дефис и обратная косая черта не используются.Почему название пишется как basE91?
Так название пишет сам автор. basE91 и Base91 обозначают одну и ту же кодировку, и эта страница следует оригинальному алгоритму.
Мешают ли пробельные символы декодированию?
Нет. Пробелы и переводы строк не входят в алфавит, поэтому декодер на этой странице их игнорирует. Текст basE91 с переносами строк можно вставлять напрямую.