Punycode (произносится как [ˈpjuːniˌkəʊd]) — стандартизированный метод преобразования последовательностей Unicode-символов в так называемые ACE-последовательности (англ. ASCII Compatible Encoding — ировка, совместимая с ASCII[1]), которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах. Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов. Используется в большинстве браузеров[2]. Существуют также специальные программы или сервисы, называемые Punycode-конвертерами, позволяющие осуществлять ирование/деирование последовательности Unicode-символов в ACE и наоборот.
Важнейшей причиной введения Punycode был тот факт, что в утверждённой стандартом системе доменных имен разрешены только 26 символов латинского алфавита, цифры от 0 до 9 и дефис. Для английского и некоторых других языков на основе латинского алфавита этого достаточно, однако другие языки могут содержать дополнительные символы, например, ä
, ö
или ü
.
В качестве базисных символов выступают символы латинского алфавита a — z (без различия между прописными и строчными буквами), цифры от 0 до 9 и дефис «-»; всего 37 символов. Алгоритм преобразования состоит из двух этапов. На первом этапе из исходного текста выбираются все символы, входящие в основную ировку ASCII (ы 0—127), и переносятся подряд в заированное слово. После этого, если в тексте встретились не ASCII-символы, к заированному слову добавляется дефис, и далее преобразование идёт по процедуре, описанной в RFC3492[3].
Последовательность символов | ировка |
---|---|
abcdef | abcdef |
abæcdöef | abcdef-qua4k |
schön | schn-7qa |
ยจฆฟคฏข | 22cdfh1b8fsa |
☺ | 74h |
правда | 80aafi6cg |