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-конвертер. Рег.ру.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.