Система доменных имен (DNS) появилась задолго до русских доменов и понимает только латинские буквы, цифры и дефис. Поэтому имя вроде пример.рф перед отправкой в сеть записывается специальным кодом — Punycode — и превращается в xn--e1afmkfd.xn--p1ai. Браузер делает это незаметно и показывает в адресной строке русские буквы, но хостинг, DNS-редактор, почтовый сервер или файл настроек часто требуют именно запись с xn--.
Конвертер выше переводит домен в обе стороны. Можно вставить не только домен, но и полный адрес страницы или почты — изменится только имя домена, — а также несколько адресов сразу, по одному в строке.
xn--80aswg.xn--p1ai — конвертер покажет его русскими буквами (в примере — сайт.рф).info@пример.рф: имя ящика до знака @ не меняется.Каждая часть домена между точками кодируется отдельно. Приставка xn-- сообщает, что дальше идет Punycode. Если в части есть латинские буквы или цифры, они записываются в начале как есть, а после последнего дефиса идет закодированная часть: например, test-сайт.рф превращается в xn--test--8ve7d2cl.xn--p1ai. Большие и маленькие буквы перед кодированием приводятся к строчным, поэтому Пример.РФ и пример.рф — один и тот же домен.
| Доменная зона | Запись в Punycode |
|---|---|
| .рф | xn--p1ai |
| .рус | xn--p1acf |
| .москва | xn--80adxhks |
| .дети | xn--d1acj3b |
| .онлайн | xn--80asehdb |
| .сайт | xn--80aswg |
.htaccess и конфигурации nginx, в robots.txt (директива Sitemap), в адресах карты сайта и в настройках CMS домен надежнее указывать в Punycode.info@xn--e1afmkfd.xn--p1ai.xn--..., хотя домен выглядит знакомым, в нем могут быть буквы из другого алфавита. Например, аpple.com с русской «а» — это xn--pple-43d.com, совсем другой сайт. Конвертер предупреждает, когда в домене перемешаны латиница и кириллица.| Где | В Punycode | Из Punycode |
|---|---|---|
| JavaScript | new URL('http://пример.рф').hostname | встроенной функции нет |
| PHP (расширение intl) | idn_to_ascii('пример.рф') | idn_to_utf8($s) |
| Python 3 | 'пример.рф'.encode('idna') | b'xn--e1afmkfd.xn--p1ai'.decode('idna') |
Punycode кодирует только имя домена. Русские буквы в остальной части адреса — в пути к странице и параметрах — записываются кодами вида %D0%9F, и для них нужен декодер URL.
münchen.de превращается в xn--mnchen-3ya.de, а домены на китайском или арабском переводятся так же.