Punycode

Punycode ([ˈpjuːniˌkəʊd]) — метод преобразования символов Unicode в ASCII[1], которые только разрешены в доменных именах сайтов.
Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов. Используется в большинстве браузеров[2]. Существуют также специальные программы или сервисы, называемые Punycode-конвертерами, позволяющие осуществлять кодирование/декодирование последовательности Unicode-символов в ACE и наоборот.
Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов. Используется в большинстве браузеров[2]. Существуют также специальные программы или сервисы, называемые Punycode-конвертерами, позволяющие осуществлять кодирование/декодирование последовательности символов Unicode в ASCII и наоборот. Может произноситься как паникод, пюникод[3] или пьюникод[4][5].
Причины использования
[править | править код]
Поскольку человеческие языки могут содержать различные символы, например, ä, ö или ü, а в стандарт для системы доменных имен разрешает использовать только символы, содержащиеся в стандарте ASCII. Последний представляет собой набор из 128 кодов символов, тогда как Unicode 17 версии содержит уже 159 866 символов. Особенность Punycode, как преобразователя Unicode в ASCII и в обратную сторону состоит в следующем:
- Если в слове много букв из одного алфавита (например, кириллицы), разница между их кодами мала, и Punycode закодирует их очень короткими последовательностями.
- Любая последовательность Unicode имеет только один вариант представления в Punycode, и наоборот.
Правила преобразования
[править | править код]Правила преобразования зафиксированы в стандарте RFC 3492[6]. Вот упрощенное описание алгоритма:
- Сепарация базовых символов. Алгоритм сначала копирует все символы исходной строки, которые уже являются базовыми (латиница, цифры, дефис), в начало выходной строки. Если в строке были не-ASCII символы, после базовых ставится разделитель — дефис
-.- Пример:
münchen→mnchen-3ya
- Пример:
- Инкрементальное кодирование (Delta Encoding). Оставшиеся не-ASCII символы не кодируются напрямую. Вместо этого алгоритм сортирует их по кодовым точкам Unicode и вычисляет разность (delta) между текущим и предыдущим символом, а также учитывает их позиции в строке. Это позволяет эффективно сжимать данные, так как символы одного алфавита обычно расположены в Unicode близко друг к другу.
- Смешанная система счисления (Variable-length mixed-radix). Вычисленные значения «дельт» преобразуются в последовательность ASCII-символов с использованием специальной системы счисления, где веса разрядов адаптируются в процессе работы, чтобы короткие последовательности соответствовали наиболее вероятным значениям.
К полученной ASCII-строке добавляется префикс xn--, чтобы DNS-клиенты могли идентифицировать её как закодированный IDN-домен.
См. также
[править | править код]Примечания
[править | править код]- ↑ Paul Hoffman. RACE: Row-based ASCII Compatible Encoding for IDN (англ.). tools.ietf.org (16 октября 2000). Дата обращения: 13 марта 2020. Архивировано 21 июня 2020 года.
- ↑ 1 2 Результаты проведённого компанией REG.RU тестирования работы браузеров с доменом .РФ. REG.RU (30 июня 2010). Дата обращения: 30 сентября 2010. Архивировано из оригинала 22 августа 2010 года.
- ↑ Куда движется DNS, и прав ли ICANN / Хабр. Дата обращения: 31 декабря 2023. Архивировано 31 декабря 2023 года.
- ↑ Что такое punycode конвертер и зачем он нужен? Дата обращения: 31 декабря 2023. Архивировано 31 декабря 2023 года.
- ↑ Эмоджи-домены: возможно ли, что они станут будущим Интернета? Дата обращения: 31 декабря 2023. Архивировано 31 декабря 2023 года.
- ↑ Adam M. Costello. Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA). — Internet Engineering Task Force, 2003-03. — № RFC 3492.
Ссылки
[править | править код]- Punycode-конвертер. hb.by.
- Punycode-конвертер. Рег.ру.