~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0057BABECF3F293E976CC7472DE39914__1716990840 ✰
Заголовок документа оригинал.:
✰ Punycode - Wikipedia ✰
Заголовок документа перевод.:
✰ Пуникод — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Punycode ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/00/14/0057babecf3f293e976cc7472de39914.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/00/14/0057babecf3f293e976cc7472de39914__translat.html ✰
Дата и время сохранения документа:
✰ 15.06.2024 20:15:33 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 29 May 2024, at 16:54 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Пуникод — Википедия Jump to content

Пуникод

Из Википедии, бесплатной энциклопедии

Punycode — это представление Unicode с ограниченным подмножеством символов ASCII , используемым для имен хостов в Интернете . С помощью Punycode имена хостов, содержащие символы Юникода, перекодируются в подмножество ASCII, состоящее из букв, цифр и дефисов, которое называется подмножеством буква-цифра-дефис (LDH). Например, München ( немецкое название Мюнхена ) кодируется как Mnchen-3ya .

Хотя система доменных имен (DNS) технически поддерживает произвольные последовательности октетов в метках доменных имен, стандарты DNS рекомендуют использовать подмножество LDH ASCII, обычно используемое для имен хостов, и требуют, чтобы сравнения строк между доменными именами DNS производились по регистру. бесчувственный. Синтаксис Punycode — это метод кодирования строк, содержащих символы Юникода, таких как интернационализированные доменные имена (IDNA), в подмножество LDH ASCII, предпочитаемое DNS. Это указано в IETF запросе комментариев 3492. [1]

Описание [ править ]

Как указано в RFC 3492, «Punycode — это экземпляр более общего алгоритма под названием Bootstring , который позволяет строкам, составленным из небольшого набора «базовых» кодовых точек, уникальным образом представлять любую строку кодовых точек, взятую из большего набора». Punycode определяет параметры для общего алгоритма начальной загрузки, соответствующие характеристикам текста в Юникоде. В этом разделе демонстрируется процедура кодирования Punycode на примере строки «bücher» ( Bücher в переводе с немецкого означает «книги »), которая переводится в метку «bcher-kva».

Чтобы упростить алгоритмы кодирования и декодирования, не было предпринято никаких попыток предотвратить кодирование некоторыми закодированными значениями недопустимых значений Unicode: однако их следует проверять и обнаруживать во время декодирования.

Punycode предназначен для работы со всеми скриптами и для самооптимизации, пытаясь адаптироваться к диапазонам наборов символов в строке во время ее работы. Он оптимизирован для случая, когда строка состоит из нуля или более символов ASCII и, кроме того, символов только из одной другой системы сценариев, но может работать с любой произвольной строкой Unicode. Обратите внимание, что при использовании DNS предполагается, что строка имени домена была нормализована с помощью nameprep и (для доменов верхнего уровня ) отфильтрована по официально зарегистрированной языковой таблице, прежде чем быть закодирована, и что протокол DNS устанавливает ограничения на допустимую длину строки. вывести строку Punycode.

Разделение символов ASCII [ править ]

Сначала все символы ASCII в строке копируются со входа на выход, пропуская любые другие символы. Например, «bücher» копируется в «bcher». Если были скопированы какие-либо символы, т.е. если во входных данных был хотя бы один символ ASCII, к выходным данным добавляется дефис ASCII (например, «bücher» → «bcher-», но «ü» → «»).

Обратите внимание, что дефисы сами по себе являются символами ASCII. Таким образом, они могут присутствовать на входе и, если да, то будут скопированы на выход. Это не вызывает двусмысленности: если вывод содержит дефисы, добавляемый всегда будет последним. Он отмечает конец символов ASCII.

Кодирование символов, отличных от ASCII [ править ]

Символы, отличные от ASCII, сортируются по значению Юникода, начиная с наименьшего (если символ встречается более одного раза, они сортируются по позиции). Каждый из них затем кодируется как одно число. Это единственное число определяет как место вставки символа, так и сам символ.

i — индекс результата, в который нужно вставить код, начиная с 0 (для вставки в начало). [ нужна цитата ]

n — количество возможных точек вставки (текущая длина результата плюс одна).

j — кодовая точка Юникода для вставки минус 127. [ нужна цитата ]

Закодированное число — n × j + i . Разделив на n и получив остаток, декодер может определить j и i .

Существует шесть возможных мест для вставки символа в строку «bcher» (в том числе перед первым символом и после последнего). Между последней кодовой точкой ASCII (127 = 0x7F, конец ASCII) и «ü» (кодовая точка 252 = 0xFC, см. дополнение к Unicode Latin-1 ) находится 124 кодовых точки. «ü» вставляется в позицию 1 после «b». Таким образом, кодер добавит число (6 × 124) + 1 = 745 , а декодер сможет получить его с помощью ⌊745 ÷ 6⌋ = 124 и 745 mod 6 = 1 .

Эти цифры строго увеличиваются. Для второго и последующих вставленных символов записывается разница между номером и предыдущим.

Номер кодируется буквами от «a» до «z» и цифрами от «0» до «9». Это не система счисления с основанием 36, а более сложная схема, описанная ниже, которая позволяет объединять числа, не разделяя их.

Кодирование чисел переменной длины [ править ]

Punycode использует обобщенные целые числа переменной длины Для представления этих значений . Например, вот как «ква» используется для обозначения кодового номера 745:

Используется система счисления с прямым порядком байтов , которая позволяет использовать коды переменной длины без отдельных разделителей: цифра ниже порогового значения отмечает, что это наиболее значащая цифра, следовательно, конец числа. Пороговое значение зависит от позиции в номере, а также от предыдущих вставок, чтобы повысить эффективность. Соответственно, веса цифр различаются.

В этом случае используется система счисления с 36 символами, где буквы от «a» до «z» без учета регистра соответствуют десятичным числам от 0 до 25, а «0» — «9» — десятичным числам от 26 до 35. Таким образом, «ква» соответствует строке десятичных чисел «10 21 0».

Для декодирования этой строки символов потребуется последовательность порогов, в данном случае это (1, 1, 26, 26, ...). [2] Вес (или разрядность ) младшей цифры всегда равен 1: 'k' (=10) с весом 1 равен 10. После этого вес следующей цифры зависит от первого порога: обычно для любое n , вес ( n +1)-й цифры равен весу предыдущей, умноженной на (36 − порог n -й цифры). Таким образом, второй символ имеет разрядность 36 минус предыдущее пороговое значение, в данном случае 35. Следовательно, сумма первых двух символов «k» (= 10) и «v» (= 21) равна 10 × 1. + 21 × 35. Поскольку второй символ не меньше своего порогового значения 1, это еще не все. Однако, поскольку третий символ в этом примере — это «а» (=0), мы можем игнорировать вычисление его веса. Следовательно, «ква» представляет собой десятичное число (10 × 1) + (21 × 35) = 745.

Число 745 будет закодировано как 10 + 21 × 35 + 0 (основание 35 используется для второй цифры, старшая цифра 0 необходима в качестве терминатора), 10 → «k», 21 → «v», 0 → «a», поэтому «бюхер» → «бчер-ква».

Сами пороги определяются для каждого последующего закодированного символа с помощью алгоритма, сохраняющего их от 1 до 26 включительно. [3] Затем регистр можно использовать для предоставления информации об исходном регистре строки. [4]

Поскольку специальные символы сортируются по их кодовым точкам с помощью алгоритма кодирования, для вставки второго специального символа в «bücher» первой возможностью является «büücher» с кодом «bcher-kvaa», второй «bücüher» с кодом «bcher». -kvab» и т. д. После «bücherü» с кодом «bcher-kvae» идут коды, обозначающие вставку ý, символа Юникода, следующего за ü, начиная с «ýbücher» с кодом «bcher-kvaf» (отличается от «übücher» с кодом « бчер-джваб») и т. д.

Префикс ACE для имен доменных интернационализированных

Чтобы дефисы в немеждународных доменных именах не вызывали декодирование Punycode, строка xn--добавляется к последовательностям Punycode в интернационализированных доменных именах. Это называется ACE (кодировка, совместимая с ASCII). [5]

Таким образом, доменное имя «bücher.tld» будет представлено в URL-адресе как «xn--bcher-kva.tld».

Примеры [ править ]

В следующей таблице показаны примеры кодировок Punycode для различных типов ввода. [6]

Вход Пуникод Описание
Пустая строка.
а а- Только символы ASCII , один строчный.
А А- Только символы ASCII, один, в верхнем регистре.
3 3- Только символы ASCII, одна цифра.
- -- Только символы ASCII, один, дефис.
-- --- Только символы ASCII, два дефиса.
Лондон Лондон- Только символы ASCII, более одного, без дефисов.
Ллойд-Аткинсон Ллойд-Аткинсон- Только символы ASCII, один дефис.
Здесь есть пробелы Здесь есть пробелы- Только символы ASCII с пробелами.
-> $1,00 <- -> 1,00 доллара США <-- Только символы ASCII, смешанные символы.
Б d0a Никаких символов ASCII, один символ кириллицы .
ты tda Никаких символов ASCII, один Latin-1 дополнительный символ .
а МХА Никаких символов ASCII, один греческий символ .
пример фск Никаких символов ASCII, один символ CJK .
😉 n28h Никаких символов ASCII, один символ эмодзи .
а Б С mxacd Никаких символов ASCII, более одного символа.
Мюнхен Мнчен-3я Смешанная строка с одним символом, не являющимся символом ASCII.
Мнчен-3я Мнчен-3я- Двойной код Punycode «Мюнхен».
Мюнхен Восток Мюнхен Восток 9дБ Смешанная строка с одним символом, отличным от ASCII, и дефисом.
Восточный вокзал Мюнхена Станция Мюнхен-Ост-u6b Смешанная строка с одним пробелом, одним дефисом и одним символом, отличным от ASCII.
abæcdöef abcdef-qua4k Смешанная строка, два символа, отличных от ASCII.
правда 80aafi6cg Русский , без ASCII.
йаджкхафахатха 22cdfh1b8fsa Тайский , без ASCII.
домен hq1bm8jm9l Корейский , без ASCII.
пример доменного имени eckwd4c7cu47r2wf Японский , без ASCII.
За 5 секунд до Кои с Маджи ВодаKoi5-783gue6qz075azm5e Японский с ASCII.
"Книги" bcher-kva8445foa Смешанные сценарии, отличные от ASCII (дополнение Latin-1 и CJK).

См. также [ править ]

Ссылки [ править ]

  1. ^ RFC 3492 , Punycode: загрузочная кодировка Unicode для интернационализированных доменных имен в приложениях (IDN) , А. Костелло, The Internet Society (март 2003 г.)
  2. ^ Это верно для первого закодированного символа (или, в терминах RFC 3492, первой «дельты»): см. RFC 3492, раздел. 6.
  3. ^ RFC 3492, разд. 3,4, 5.
  4. ^ RFC 3492, приложение. А.
  5. ^ Управление по присвоению номеров в Интернете (14 февраля 2003 г.). «Завершение выбора префикса IDNA IANA» . www.atm.tut.fi. ​ Архивировано из оригинала 27 апреля 2010 г. Проверено 22 сентября 2017 г.
  6. ^ Punycode в этой таблице был создан с использованием встроенного кодека «punycode» языка программирования Python версии 3.8 ( s.encode("punycode")). См. страницу обсуждения .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0057BABECF3F293E976CC7472DE39914__1716990840
URL1:https://en.wikipedia.org/wiki/Punycode
Заголовок, (Title) документа по адресу, URL1:
Punycode - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)