Страница 1 из 1

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

СообщениеДобавлено: 10.06.2025 22:45:13
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. Поддерживает в том числе четырех-байтные кодовые точки в отличии от других реализаций (то есть покрывает все пространство, включая эмодзи, к примеру)

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

СообщениеДобавлено: 12.06.2025 09:31:31
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.

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

СообщениеДобавлено: 12.06.2025 15:02:49
Ichthyander
:!: Спасибо, поправил