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

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

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

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

Сообщение Ichthyander » 10.06.2025 22:45:13

Создан новый репозиторий для работы с международными доменными именами (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. Поддерживает в том числе четырех-байтные кодовые точки в отличии от других реализаций (то есть покрывает все пространство, включая эмодзи, к примеру)
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

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

Сообщение Alexander » 12.06.2025 09:31:31

Нужно комментарий перед 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.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 833
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

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

Сообщение Ichthyander » 12.06.2025 15:02:49

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


Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru