Кодировки и URL
Кодирование и декодирование онлайн: Base64 и Base64URL, разбор URL и query-параметров, JWT, процентная запись. Всё считается в браузере, данные не покидают компьютер.
Base64: кодировать и декодировать
Кодирует текст и файлы в Base64 и расшифровывает обратно: UTF-8 и Latin-1, URL-safe алфавит, переносы
Разобрать URL по частям
Схема, домен, порт, путь, параметры и якорь: punycode, таблица параметров и сборка адреса обратно
Разбор JWT-токена
Разбор JWT: header, payload и подпись по отдельности, даты iat, exp и nbf, проверка срока
Редактор параметров URL
Правка query-параметров таблицей: расшифровка значений, повторы имён, «+» и %20, кириллица, сборка адреса и UTM-метки
Зачем нужна категория «Кодировки и URL»
Данные редко передаются в том виде, в котором их удобно читать. Одни системы работают только с латиницей, другие — только с байтами, третьи передают двоичные файлы через текстовый протокол. Кодирование переводит данные в подходящий для передачи вид: буквы — в проценты, файл — в набор латинских символов, строку — в последовательность байтов. Обратно переводят тем же способом, только в другую сторону.
- Токен из заголовка Authorization пришёл в логах одной длинной строкой из трёх частей — что внутри, по внешнему виду не понять.
- Ссылка из письма потеряла пробелы и превратилась в %20, %D0%9F и плюсы: глазами такой адрес уже не прочитать.
- В ответе API вместо картинки, PDF или архива пришла длинная строка из латинских букв — так двоичные данные передают текстом.
- Русский текст в адресной строке выглядит как %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82, а в другом окне те же буквы лежат ромбами и знаками вопроса.
- К ссылке для рассылки нужно добавить utm-метки, чтобы переходы были видны в аналитике, и при этом не сломать уже существующие параметры.
- Строку с пробелами, кавычками и русскими буквами надо передать в ссылке или в письме так, чтобы её не исказили почтовый клиент и мессенджер.
- При копировании строки из лога потерялось выравнивание по знакам «=» на конце, и приложение отклоняет данные как некорректные.
- Данные ходят между сервисами, и один из них отдаёт вместо русских букв ромбы: кодировку между сторонами не согласовали.
Категория собирает инструменты под эту работу: посмотреть, что за строка пришла, перевести её в читаемый вид и обратно, разложить адрес на части, разобрать строку запроса, показать содержимое токена. Внутри категории действует одно правило: инструмент решает одну задачу, а близкие варианты собраны режимами в нём же — направление перевода, алфавит, выравнивание, разбор с повторами. Отдельной страницы для обратной операции нет: кодирование и декодирование — это одна задача.
Считают инструменты в браузере: введённое не отправляется на сервер, не сохраняется и исчезает при обновлении вкладки. И помните, что кодирование — не защита: строка, переведённая в Base64 или в проценты, раскрывается тем же инструментом за секунду. Поэтому секреты, которые нельзя показывать, сюда лучше не вставлять.
Частые вопросы о категории
Чем кодирование отличается от шифрования?
Кодирование меняет форму данных, но не прячет их: чтобы раскодировать строку, нужен только алгоритм, а не ключ, поэтому Base64, процентную запись или UTF-8 снимает любой желающий — в том числе инструментом на этой странице. Шифрование скрывает содержимое: без ключа прочитать данные нельзя, и знание алгоритма само по себе не помогает. Отсюда практическое следствие: кодирование защищает от поломки при передаче — запрещённых символов, пробелов, переводов строк, обрезанных байтов, — но не защищает от чужого взгляда. Пароль, ключ или токен, просто переведённый в Base64, остаётся открытым для всех.
Безопасно ли вставлять сюда токены и пароли? Уходят ли данные на сервер?
На сервер не уходит ничего: инструменты считают результат в браузере на JavaScript, введённое не отправляется по сети, не сохраняется и не логируется. Проверить это можно так: откройте страницу, отключите интернет и продолжите работу — результат считается точно так же. Но безопасность этим не ограничивается: вставленная строка останется в буфере обмена, в истории вкладки и в памяти браузера на вашем компьютере. Поэтому рабочие токены и пароли лучше проверять на тестовых значениях, а секрет, который вы не показали бы коллеге в чате, не стоит нести и в сторонний веб-инструмент.
Что такое Base64URL и почему он отличается от обычного Base64?
Обычный Base64 использует знаки «+» и «/», а на конце добивает строку знаками «=» до кратности четырём. В адресе и в токене эти символы мешают: «+» в строке запроса читается как пробел, «/» разделяет путь, «=» отделяет имя параметра от значения. Base64URL заменяет «+» на «-», «/» на «_» и обычно отбрасывает выравнивание — так строка безопасно живёт внутри ссылки и не требует экранирования. Сами данные при этом не меняются: это те же байты, записанные другими символами. Поэтому одно и то же значение в разных местах выглядит по-разному, и при переносе строки важно, какой из двух алфавитов ждёт получатель.
Что такое UTF-8 и почему русский текст в URL выглядит процентами?
UTF-8 — способ записать любой символ Юникода байтами. В адресе по стандарту допустимы только латинские буквы, цифры и небольшой набор служебных знаков, всё остальное кодируется процентной записью: каждый байт превращается в знак «%» и две шестнадцатеричные цифры. Русская буква занимает в UTF-8 два байта, отсюда «%D0%9F» вместо «П» — на одну букву приходится два таких знака. Пробел в пути кодируется как %20, а в строке запроса иногда заменяется плюсом: плюс означает пробел только там. Поэтому одна и та же строка в разных местах адреса выглядит по-разному.
Можно ли доверять данным из JWT, не проверяя подпись?
Нет. Первые две части токена — это Base64URL от обычного JSON, их читает кто угодно и правит без всякого ключа: подпись при этом останется прежней, а содержимое изменится. Подпись как раз и подтверждает, что токен выдал владелец ключа и что поля не тронули по дороге. Проверка подписи требует ключа или публичного ключа сервиса и выполняется на сервере, а не в браузере. Данные из непроверенного токена годятся только для отладки — посмотреть, что за поля пришли, но не принимать по ним решений о доступе.
Почему одну и ту же строку кодируют по-разному: %D0%9F, \u041F, П?
Потому что способов записать нелатинский символ несколько, и каждый решает свою задачу. Процентная запись (%D0%9F) работает с байтами и нужна там, где допустимы только латинские символы: в адресе, в заголовке HTTP, в имени cookie. Экранирование \u041F — запись кода символа для JavaScript и JSON, где важна длина и однозначность строки. HTML-мнемоника П или « — для HTML, где символ иначе слился бы с разметкой. Все три варианта описывают один и тот же символ разными средствами, и подставлять их друг вместо друга нельзя. Поэтому при переносе строки из одной системы в другую важно, какую именно запись ждёт получатель.