libu8 is a portable C library for polyglottal programming. The philosophy behind libu8 is providing general internal data representations and support conversion to and from local encodings or conventions. For instance, libu8 supports programmatic manipulation of UTF-8 strings and conversion of those strings to and from various external encodings. This contrasts with the approach of the standard C library, where a user or application locale controls the internal representation used for strings.

The core libraries of libu8 provide for scanning, generating, and manipulating utf-8 strings, including stream-based I/O, converstion to/from other character sets, and character type information. The libraries also provide simple portable system facilities for accessing the run-time environment, signalling and catching exceptions (based on setjmp), generating formatted output (i.e. printf), and logging program events. Another library layer provides for socket-based streaming I/O and portable network functionality.

libu8 is licensed under the LGPL (V2.1) and GPL (V2) and the subversion repository can be browsed here. In the near future, we will be providing packaged releases of libu8 in various binary formats.