GNU Libidn is an implementation of the Stringprep, Punycode, and IDNA
specifications defined by the IETF Internationalized Domain Names (IDN)
working group. It is used to prepare internationalized strings (such as
domain name labels, usernames, and passwords) in order to increase the
likelihood that string input and string comparison work in ways that make
sense for typical users throughout the world.

The library contains a generic Stringprep implementation that does Unicode
3.2 NFKC normalization, mapping and prohibition of characters, and
bidirectional character handling. Profiles for iSCSI, Kerberos 5, Nameprep,
SASL, and XMPP are included. Punycode and ASCII Compatible Encoding (ACE) via
IDNA are supported.

Homepage:
https://www.gnu.org/software/libidn/
