Punycode (произносится как «пуникод») — стандартизированный метод преобразования последовательностей Unicode- символов в ACE- последовательности, которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах. Punycode описан в RFC 3492. Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII: Расшифровка аббревиатуры, история и применение-символов.
Причиной введения Punycode был тот факт, что в утверждённой стандартом Раздел DNS: Что такое DNS разрешены только 26 символов латинского алфавита, цифры от 0 до 9 и дефис. Для английского и некоторых других языков с латинским алфавитом этого достаточно, однако другие языки, в том числе и с латинским алфавитом, содержат дополнительные символы, например ä, ö или ü.
Преобразование в Punycode должно происходить в клиентских приложениях (например, браузерах), а не на сервере.
Чтобы IDN Интернационализованные Доменные Имена - домен после преобразования нельзя было спутать с обычным доменом, все IDN - домены начинаются со специального префикса «XN–».
Для JavaScript существует клиентская библиотека punycode.js, планируется, что она также заменит в составе Node.js с версии 0.6.2 устаревший алгоритм. Скачиваем:
$ git clone git://github.com/bestiejs/punycode.js.git
Для подключения в браузере:
<script type="text/javascript" src="punycode.js"></script> <script type="text/javascript" language="javascript"> // конвертация в UTF-8 var result = punycode.ToASCII('кремль.рф'); </script <script type="text/javascript" language="javascript"> // конвертация в ASCII var result = punycode.ToUnicode('XN--E1AJEDS9E.XN--P1AI'); </script>
Для подключения в Node.js (младше версии 0.6.2) нужно использовать npm
npm install punycode
Подключение для Narwhal, Node.js, RingoJS:
var punycode = require('punycode');