Кодирование

Punycode encode/decode

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

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

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

Типичные сценарии

Что стоит помнить

Похожие визуально символы из разных алфавитов (например, кириллическая «а» и латинская «a») могут образовывать домен, выглядящий идентично известному бренду, — это основа homograph-фишинга.

Не все браузеры показывают декодированный Unicode одинаково: при смешении алфавитов в метке домена браузер часто намеренно показывает сырую xn---запись как предостережение.

Статья об этом инструменте: 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, без которых документ ломается при парсинге.