Кратко
- Bootstring буквально копировал базовые точки ASCII, а каждую небазовую представлял дельтой, объединявшей числовое расстояние и позицию вставки.
- Самоограничивающиеся переменные целые и адаптивное смещение делали форму единственной и обратимой. Они не переводили, не нормализовали и не доказывали допустимость IDNA, регистрацию или идентичность.
Хвост Punycode выглядит непрозрачно, потому что не предназначен для чтения человеком. Декодер начинает с символов, уже помещающихся в ASCII, и вставляет остальные в точные промежутки. Он восстанавливает последовательность, не понимая язык.
Сначала Bootstring отделяет базовые кодовые точки. Они копируются в начало с сохранением относительного порядка, а при наличии хотя бы одной ставится разделитель. Для Punycode базовый набор — ASCII, разделитель — дефис. Буквальная часть не перевод, а ввод, которому не нужно кодирование.
Хвост несёт недостающую структуру. Декодер хранит n как кандидат кодовой точки и i как возможную позицию. Состояние проходит все промежутки; после конца i обнуляется, а n растёт. Дельта считает состояния без вставки до помещения текущего n в текущее i.
Одно неотрицательное число несёт расстояние в пространстве кодов и место в строке. Кодировщик рассматривает небазовые точки по числовому порядку, обычно уменьшая соседние расстояния, и выводит дельты, заставляющие декодер вернуть исходное расположение. Отдельная таблица позиций не нужна.
Для сцепленных дельт нужны границы. Обобщённые целые переменной длины используют порог на каждой позиции; ровно одна последняя цифра оказывается ниже порога. Little-endian позволяет разделять значения с начала, и каждому неотрицательному числу соответствует одна форма.
После каждой дельты bias меняет следующие пороги. Первый большой скачок сильно демпфируется, дальнейшие учитывают длину выхода. Последняя дельта подсказывает вероятный масштаб следующей. Это не языковая модель, а локальный арифметический прогноз.
Punycode задаёт базу 36, буквы для значений от нуля до 25, цифры для 26–35, начальное n 128 и смещение 72. Параметры влияют на эффективность, не на правильность, если соблюдены ограничения. Overflow должен обнаруживаться; граница для IDNA-меток не разрешает непроверенную арифметику вообще.
Единственность не даёт одной Unicode-последовательности нескольких ASCII-меток под разными DNS-властями. Но она не создаёт единственный человеческий смысл. Разные Unicode-последовательности могут считаться одинаковым текстом по языковым правилам или нормализации. Punycode принимает уже выбранную последовательность.
RFC 3490 включила алгоритм в IDNA; IDNA2008 сохранил Punycode A-label, изменив окружающие правила. Это минимальная начальная спецификация Хэн Лу: узкий обратимый механизм остаётся, а выбор символов, mapping и политика регистрации развиваются отдельно.
Ввод, подготовка, буквальная часть, дельты, реконструкция, допуск, регистрация, ответ DNS и идентичность — разные свидетельства. Punycode связывает лишь последовательность с ASCII-представлением. Его точность не распространяется дальше.
Источники
- RFC 3492
- Текст RFC 3492
- Запись RFC Editor
- Запись IETF Datatracker
- История IETF
- Исправления RFC 3492
- RFC 3490
- RFC 3491
- RFC 3454
- RFC 5890
- RFC 5891
- RFC 5892
- RFC 5894
- RFC 5895
- RFC 1034
- RFC 1035
- Репозиторий практик IDN IANA
- Unicode Technical Standard #46
- Хэн Лу о минимальной начальной спецификации
- Хэн Лу об уровнях реальности
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
