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

Преобразуйте текст, шестнадцатеричные байты или файлы в Base36, алфавит из десяти цифр и 26 букв, и декодируйте строки Base36 обратно в байты. Вывод в верхнем регистре можно включить по желанию.

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

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

  1. Выберите «Кодировать», чтобы перевести текст в Base36, или «Декодировать», чтобы получить текст из Base36.
  2. Введите или вставьте входные данные либо откройте небольшой файл (примерно до 20 КБ).
  3. Если в результате нужны заглавные буквы, включите «Верхний регистр».
  4. Скопируйте результат или скачайте его в виде файла.

Что такое Base36?

Base36 записывает данные десятью цифрами и 26 буквами латинского алфавита: 0-9, а за ними a-z. Это самый большой алфавит, который можно составить из цифр и букв без учёта регистра, поэтому строки Base36 без потерь проходят через системы, которые меняют или игнорируют регистр. Каждый символ несёт около 5,17 бита, поэтому результат примерно в 1,55 раза больше входных данных — немного короче, чем у Base32.

Поскольку 36 не является степенью двойки, байты нельзя просто разрезать на группы бит. Вместо этого инструмент читает все входные данные как одно большое беззнаковое число и переводит его в систему с основанием 36 — так же, как это делает Base58. В числе ведущие нулевые байты потерялись бы, поэтому каждый из них записывается как ведущий 0 и восстанавливается при декодировании. На больших объёмах такая арифметика работает медленно, поэтому инструмент принимает данные примерно до 20 КБ.

Где используется Base36

  • Короткие идентификаторы. Сервисы сокращения ссылок, номера заказов и коды обращений часто показывают числовой идентификатор из базы данных в системе с основанием 36. Например, Reddit использует основание 36 для идентификаторов постов и комментариев.
  • Места, где регистр не учитывается. Имена DNS и некоторые файловые системы не различают регистр букв. Поэтому IPFS использует форму Base36 для некоторых идентификаторов в адресах шлюзов на поддоменах.
  • Числа в коде. Основание 36 — наибольшее, которое большинство языков программирования поддерживают при преобразовании целых чисел без дополнительных библиотек.

Если регистр букв сохраняется и нужна самая короткая буквенно-цифровая строка, компактнее будет Base62.

Числа Base36 в программах

Эта страница кодирует байты. Чтобы перевести целое число, используйте встроенные функции вашего языка или конвертер систем счисления:

// JavaScript
(1000000).toString(36)        // 'lfls'
parseInt('lfls', 36)          // 1000000
123456789012345678901234567890n.toString(36)   // BigInt для больших значений

# Python
int('lfls', 36)               # 1000000
# встроенной функции для обратного преобразования нет

parseInt теряет точность для значений больше Number.MAX_SAFE_INTEGER; для больших значений накапливайте цифры в BigInt самостоятельно.

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

Алфавит0-9 a-z
Размер результатаОколо 155% (перевод большого числа)
ДополнениеНет
СтандартФормального стандарта нет
Учёт регистраНет

Примеры

Исходные данные (UTF-8)Результат
Hello, World!fg3h7vqw7een6jwwnzmp
Base64.is76f8bz4veeatf7
你好2h5exfqm65

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

Учитывает ли Base36 регистр?

Нет. По умолчанию результат выводится в нижнем регистре, а параметр «Верхний регистр» переключает его на заглавные буквы. Декодер принимает любой регистр.

Почему другой инструмент выдаёт другой результат Base36?

У Base36 нет формального стандарта. Одни инструменты кодируют число, другие — байты, и ведущие нулевые байты они обрабатывают по-разному. Этот инструмент кодирует входные байты как одно большое число и записывает каждый ведущий нулевой байт как 0.

Есть ли ограничение на размер?
Да, примерно 20 КБ, потому что перевод большого числа занимает тем больше времени, чем больше входные данные. Для файлов и больших объёмов данных лучше подходят Base32 или Base64.
Как перевести число в Base36?
Воспользуйтесь конвертером систем счисления, который показывает десятичное значение в Base36 и других системах. Эта страница воспринимает входные данные как текст или байты, поэтому, если ввести 100, будут закодированы символы 1, 0 и 0, а не число сто.