Punycode () — метод преобразования символов Unicode в ASCII, которые разрешены в доменных именах сайтов.

Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов. Используется в большинстве браузеров. Существуют также специальные программы или сервисы, называемые Punycode-конвертерами, позволяющие осуществлять кодирование/декодирование последовательности Unicode-символов в ACE и наоборот.

Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов. Используется в большинстве браузеров. Существуют также специальные программы или сервисы, называемые Punycode-конвертерами, позволяющие осуществлять кодирование/декодирование последовательности символов Unicode в ASCII и наоборот. Может произноситься как паникод, пюникод или пьюникод.

Причины использования

Человеческие языки могут содержать различные символы, например, ä, ö или ü, а стандарт для системы доменных имен разрешает использовать только символы, содержащиеся в стандарте ASCII. Последний представляет собой набор из 128 кодов символов, тогда как Unicode 17 версии содержит уже 159 866 символов. Особенность Punycode, как преобразователя Unicode в ASCII и в обратную сторону состоит в следующем: Если в слове много букв из одного алфавита (например, кириллицы), разница между их кодами мала, и Punycode закодирует их очень короткими последовательностями. Любая последовательность Unicode имеет только один вариант представления в Punycode и наоборот.

Правила преобразования Правила преобразования зафиксированы в стандарте RFC 3492. Вот упрощенное описание алгоритма: Сепарация базовых символов. Алгоритм сначала копирует все символы исходной строки, которые уже являются базовыми (латиница, цифры, дефис), в начало выходной строки. Если в строке были не-ASCII символы, после базовых ставится разделитель — дефис -. Пример: münchen → mnchen-3ya Инкрементальное кодирование (Delta Encoding). Оставшиеся не-ASCII символы не кодируются напрямую. Вместо этого алгоритм сортирует их по кодовым точкам Unicode и вычисляет разность (delta) между текущим и предыдущим символом, а также учитывает их позиции в строке. Это позволяет эффективно сжимать данные, так как символы одного алфавита обычно расположены в Unicode близко друг к другу. Смешанная система счисления (Variable-length mixed-radix). Вычисленные значения «дельт» преобразуются в последовательность ASCII-символов с использованием специальной системы счисления, где веса разрядов адаптируются в процессе работы, чтобы короткие последовательности соответствовали наиболее вероятным значениям.

К полученной ASCII-строке добавляется префикс xn--, чтобы DNS-клиенты могли идентифицировать её как закодированный IDN-домен.

См. также Internationalized Resource Identifier

Примечания

Ссылки

Категория:ASCII Категория:Юникод Категория:DNS