Кодирование

Punycode encode/decode

Кодирование доменных имён с юникод-символами (IDN) в ASCII-совместимый формат Punycode (xn--) и обратно.

The DNS system historically only supports ASCII characters, so domain names with Cyrillic, CJK, or other non-ASCII characters (IDN) are encoded as Punycode — an ASCII-compatible form prefixed with xn--. This tool encodes and decodes such domains.

How to use it

Common uses

Things to keep in mind

Visually similar characters from different scripts (like Cyrillic "а" and Latin "a") can form a domain that looks identical to a known brand — this is the basis of homograph phishing.

Not every browser shows decoded Unicode the same way: when a domain label mixes scripts, browsers often deliberately show the raw xn-- form as a warning sign.

Статья об этом инструменте: Punycode: как домены с кириллицей работают в DNS

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

Зачем нужен Punycode?

DNS изначально поддерживает только ASCII, поэтому доменные имена с не-латинскими символами (кириллица, иероглифы, умляуты и т.д.) кодируются в Punycode — ASCII-совместимую строку с префиксом xn--, которую понимают все DNS-серверы.

При чём тут риск фишинга?

IDN-домены позволяют подобрать символы из разных алфавитов, визуально неотличимые от привычных букв (например, кириллическую «а» вместо латинской), и зарегистрировать домен-двойник для известного сайта. Такая атака называется homograph-спуфингом, и именно поэтому браузеры иногда показывают домен в виде xn-- вместо юникод-варианта.

Домены, которые я ввожу, куда-то отправляются?

Нет, кодирование и декодирование Punycode происходят полностью в браузере, без запросов к серверу.

Как распознать, что ссылка использует Punycode?

Закодированный домен всегда имеет префикс xn-- перед каждой меткой, содержащей не-ASCII символы. Если в адресной строке или письме видите домен, начинающийся на xn--, это признак IDN — стоит проверить, какой текст скрывается за кодированием.

Все ли браузеры показывают кириллицу в адресной строке одинаково?

Нет. Некоторые браузеры показывают декодированный Unicode только если все символы домена принадлежат одному алфавиту, а при смешении алфавитов (признак homograph-атаки) намеренно показывают сырую xn---запись вместо оригинальных символов.

Статьи: Кодирование

Base64: зачем нужно кодирование и как оно работает

Как Base64 превращает бинарные данные в текст ASCII и где это реально нужно.

Base32: чем отличается от Base64 и когда удобнее

Регистронезависимый алфавит Base32 и сценарии, где он удобнее Base64.

URL Encode/Decode: percent-encoding в ссылках

Как спецсимволы в адресной строке и query-параметрах превращаются в %XX-последовательности.

HTML Entities: как безопасно выводить спецсимволы на странице

Почему символы < > & нужно экранировать и как это предотвращает поломку разметки.

JWT: структура токена и что значит «декодировать» JWT

Header, payload и signature JWT-токена и почему декодирование — не то же самое, что проверка подписи.

Unicode Escape: что означают последовательности \uXXXX

Откуда в JSON и JS-строках берутся последовательности вида \u0041 и что они означают.

ROT13 и шифр Цезаря: простая замена символов

Почему сдвиг на 13 букв делает ROT13 симметричным и зачем его вообще используют сегодня.

Азбука Морзе: как текст превращается в точки и тире

Принцип кодирования букв точками и тире и где азбука Морзе применяется сейчас.

Data URI: когда встраивать изображения прямо в код

Как data:-URI встраивает содержимое файла прямо в HTML или CSS и когда это оправдано.

Gzip + Base64: сжатие данных для передачи текстом

Зачем сжатые бинарные данные ещё и кодируют в Base64 перед тем, как поместить в текстовое поле.

XML Entities: экранирование символов в XML-документах

Пять обязательных XML-entity, без которых документ ломается при парсинге.