В адресе страницы по стандарту могут быть только латинские буквы, цифры и несколько знаков. Все остальные символы — русские буквы, пробелы, кавычки — браузер записывает байтами: каждый байт превращается в знак % и две шестнадцатеричные цифры. Поэтому ссылка на статью «Кириллица» в Википедии, скопированная из адресной строки, выглядит так:
https://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0
Это не ошибка и не кракозябры: ссылка рабочая, просто читать ее неудобно. Декодер выше возвращает такой записи обычный вид, а при нажатии «Закодировать» делает обратное — готовит русский текст для вставки в адрес или в параметр запроса.
%D0%9F, результат появится сразу. Можно нажать и кнопку «Декодировать»./ ? & = #. Для значения одного параметра (например, поискового запроса) отметьте «Кодировать все спецсимволы».Код после знака % — это один байт. Сколько байтов занимает буква, зависит от кодировки, в которой браузер или сайт записал адрес:
| Слово | Кодировка | Как выглядит в ссылке |
|---|---|---|
| Привет | UTF-8 (все современные сайты и браузеры) | %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82 |
| Привет | Windows-1251 (старые сайты, форумы, формы поиска) | %CF%F0%E8%E2%E5%F2 |
| пробел | любая | %20 или + (в параметрах запроса) |
В UTF-8 русская буква занимает два байта, поэтому коды почти всегда начинаются с %D0 или %D1. В Windows-1251 буква занимает один байт, и коды идут в диапазоне от %C0 до %FF. По этому признаку декодер и определяет кодировку автоматически.
%25 — это закодированный сам знак процента. Перенесите результат в исходное поле и декодируйте еще раз.+, а сам плюс — кодом %2B. Если в адресе плюс означает именно плюс (например, в пути к файлу), снимите флажок «“+” означает пробел».| Где | Раскодировать | Закодировать |
|---|---|---|
| JavaScript | decodeURIComponent(s) | encodeURIComponent(s) |
| PHP | rawurldecode($s) (или urldecode, который превращает «+» в пробел) | rawurlencode($s) |
| Python 3 | urllib.parse.unquote(s), для «+» — unquote_plus | urllib.parse.quote(s) |
| Excel | встроенной функции нет | =КОДИР.URL(A1) (Excel 2013 и новее) |
Все эти функции по умолчанию работают с UTF-8. Ссылку в Windows-1251 в Python раскодирует unquote(s, encoding='cp1251'), а decodeURIComponent в JavaScript на такой ссылке выдает ошибку «URIError: malformed URI sequence» — это верный признак того, что кодировка не UTF-8.
?), по старому правилу HTML-форм. В пути к странице плюс означает сам плюс, а пробел записывается только как %20. Поэтому при кодировании этот инструмент всегда пишет пробел как %20.пример.рф (в виде xn--e1afmkfd.xn--p1ai), а коды %XX используются только для остальной части адреса: пути и параметров. Перевести домен в обе стороны можно в Punycode-конвертере.