Internationalized Domain Name Library (LibIDN)
LibIDN is our implementation of the StringPrep, Punycode and IDNA technologies. LibIDN is intended to be used by applications or libraries that deal with international character strings, and in particular international domain names.
LibIDN is available for use in C, C++, Java, C# and Emacs Lisp.
Please see the LibIDN homepage for more information.
LibIDN contains a generic Stringprep implementation that does Unicode 3.2 NFKC normalization, mapping and prohibitation 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.
The Stringprep API consists of two main functions, one for converting data from the system’s native representation into UTF-8, and one function to perform the Stringprep processing. Adding a new Stringprep profile for your application within the API is straightforward. The Punycode API consists of one encoding function and one decoding function. The IDNA API consists of the ToASCII and ToUnicode functions, as well as an high-level interface for converting entire domain names to and from the ACE encoded form.
Libidn is developed for the GNU/Linux system, but runs on over 20 Unix platforms (including Solaris, IRIX, AIX, and Tru64) and Windows.
For 75 EUR you can purchase the LibIDN source package with 1 hour technical support through e-mail, covering installation and use of the library. Purchasing LibIDN here will help the author maintain and improve the library in the future.