Конвертер IDN (международные доменные имена) и Punycode

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Ответить
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Конвертер IDN (международные доменные имена) и Punycode

Сообщение Ichthyander »

Создан новый репозиторий для работы с международными доменными именами (IDN) на FreePascal:
https://github.com/Al-Muhandis/fp-idn/

Модуль реализует Punycode-кодирование и декодирование, полностью совместим с RFC 3492. Может использоваться не только для доменных имён в формате Unicode (IDN), но и в любых задачах, где нужно безопасно кодировать Unicode-строки в ASCII — например, для хранения, передачи или генерации URL-совместимых идентификаторов.

Пример:

Код: Выделить всё

writeln(PunycodeEncode('пример')); // -> e1afmkfd
writeln(UnicodeToIDN('mail.пример.рф')); // ->  mail.xn--e1afmkfd.xn--p1a
Также включены юнит тесты и бенчмарки производительности.

Буду рад отзывам, баг-репортам и предложениям по улучшению!

P.S. Поддерживает в том числе четырех-байтные кодовые точки в отличии от других реализаций (то есть покрывает все пространство, включая эмодзи, к примеру)
Аватара пользователя
Alexander
энтузиаст
Сообщения: 878
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Нужно комментарий перед Ensure поставить.

Код: Выделить всё

./build_benchmarks.sh
Building benchmarks...
./build_benchmarks.sh: строка 12: Ensure: команда не найдена
Compiling the console test application...
Hint: (11030) Start of reading config file /etc/fpc.cfg
Hint: (11031) End of reading config file /etc/fpc.cfg
Free Pascal Compiler version 3.3.1 [2025/06/11] for x86_64
Copyright (c) 1993-2023 by Florian Klaempfl and others
(1002) Target OS: Linux for x86-64
(3104) Compiling benchmarks/benchconsole.lpr
(9015) Linking benchmarks/benchconsole
(1008) 94 lines compiled, 0.4 sec, 736592 bytes code, 1428968 bytes data
(1022) 2 hint(s) issued
Running benchmarks...
Benchmark results:
Name                           Iterations     Duration        Ops/s
UTF8ToPunycode short               100000           86   1162790.75
PunycodeToUTF8 short               100000           65   1538461.50
UTF8ToPunycode long                100000         7891     12672.67
PunycodeToUTF8 long                100000         3927     25464.73
UnicodeToIDN                       100000          275    363636.38
IDNToUnicode                       100000          214    467289.72
UnicodeToIDN ASCII                 100000           65   1538461.50
IDNToUnicode ASCII                 100000           61   1639344.25

Benchmarks completed.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

:!: Спасибо, поправил
Ответить