Перекодировка национальных доменов

Стало мне интересно, как происходит преобразование кириллических доменов типа домен.рф к виду xn--d1acufc.xn--p1ai и для чего это нужно. Разобрался на примитивном обывательском уровне. Теперь попробую объяснить доступно, не оперируя по возможности высоконаучными терминами.

Система доменных имён (DNS) работает только с кодировкой ASCII, а именно с такими её символами, как латинские буквы a-z, цифры 0-9, знаки «-» и «.». Когда встал вопрос о появлении национальных доменов, то было принято решение эту систему не менять, а перекодировать на стороне пользователей последовательности символов национальных алфавитов в последовательности латинских букв и цифр.

Был разработан специальный алгоритм перекодировки. С этим алгоритмом научились работать все популярные браузеры. Когда мы набираем в браузере домен.рф, то браузер сначала выполняет преобразование к виду xn--d1acufc.xn--p1ai, и только потом отправляет запрос в систему DNS.

Данный алгоритм реализуется следующим образом:

1. Все символы переводятся в нижний регистр.

2. Происходит преобразование национальных символов к стандарту UNICODE, в котором представлены почти все национальные алфавиты. Например, буквы русского алфавита в нижнем регистре записаны таким образом:

UNICODE буквы
0?0430 а
0?0431 б
0?0432 в
0?0433 г
0?0434 д
0?0435 е
0?0451 ё
0?0436 ж
0?0437 з
0?0438 и
0?0439 й
0x043A к
0x043B л
0x043C м
0x043D н
0x043E о
0x043F п
0?0440 р
0?0441 с
0?0442 т
0?0443 у
0?0444 ф
0?0445 х
0?0446 ц
0?0447 ч
0?0448 ш
0?0449 щ
0x044A ъ
0x044B ы
0x044C ь
0x044D э
0x044E ю
0x044F я

3. Последовательность символов в кодировке UNICODE с помощью технологии Punycode преобразуется в формат АСЕ, который представляет собой кодировку ASCII (латинские буквы, цифры и «-«), понятную DNS-серверам. Стоит отметить, что на этом этапе перекодировка выполняется не посимвольно, а по заковыристому алгоритму, суть которого здесь раскрывать не буду. Приведу лишь некоторые примеры такого преобразования:

а 80a
б 90a
аб 80ac
аба 80aac

Если хотите узнать о преобразовании во всех подробностях, вот ссылка на официальный документ на английском языке. Я приведу лишь пример из этого документа для закрепления материала:

Перекодируем фразу «ПочемуЖеОниНеГоворятПоРусски«.
Переводим в нижний регистр: почемужеонинеговорятпорусски.
Переводим в Юникод посимвольно:
u+043F u+043E u+0447 u+0435 u+043C u+0443 u+0436 u+0435 u+043E
u+043D u+0438 u+043D u+0435 u+0433 u+043E u+0432 u+043E u+0440
u+044F u+0442 u+043F u+043E u+0440 u+0443 u+0441 u+0441 u+043A
u+0438
Применяем технологию преобразования Punycode: b1abfaaepdrnnbgefbaDotcwatmq2g4l
И, чтобы подчеркнуть национальность домена, добавляем xn--: xn--b1abfaaepdrnnbgefbaDotcwatmq2g4l

xn-- сообщает браузеру и другим программам, что используется национальный домен, и что не плохо было бы отображать его в удобоваримом виде.

В заключении отмечу, что если вам вдруг понадобится осуществить перекодировку кириллического домена, то достаточно будет воспользоваться одним из готовых решений. В любой поисковой системе ищем «Punycode перекодировщик» или «Unicode Punycode Конвертер«. Мне понравился вот этот перекодировщик, работающий в обоих направлениях.

Запись опубликована в рубрике Новичкам с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *