GNU Libidn is a fully documented implementation of the Stringprep,
Punycode and IDNA 2003 specifications.
Libidn's purpose is to encode and decode internationalized domain names.

The library contains a generic Stringprep implementation. Profiles for
Nameprep, iSCSI, SASL, XMPP and Kerberos V5 are included. Punycode and
ASCII Compatible Encoding (ACE) via IDNA are supported. A mechanism to
define Top-Level Domain (TLD) specific validation tables, and to compare
strings against those tables, is included. Default tables for some TLDs
are also included.
