          LIBCHARSET - portable character set determination library

This library provides a function which determines the character set / encoding
of text in the currently selected locale (the LC_CTYPE locale facet).

It is useful for portable programs which need to process text in other
encodings and locales than the currently selected one. Possible uses:

  * Use of Unicode in POSIX compliant applications.
  * Conversion of text between the current locale's encoding and UTF-8 (or
    any other given encoding).
  * Mail agents.

In theory, this would be very simple: POSIX provides the nl_langinfo function,
in such a way that

                  nl_langinfo (CODESET)

returns the encoding name. But the nl_langinfo function still does not exist
on some systems, and on those where it exists it returns unstandardized
variations of the encoding names, like (on Solaris) "PCK" for "Shift_JIS".

This library fixes these flaws and provides a function

       const char * locale_charset (void);

It determines the current locale's character encoding, and canonicalizes it
into one of the canonical names listed in localcharset.h. The result must
not be freed; it is statically allocated. If the canonical name cannot be
determined, the result is a non-canonical name.


Installation:

As usual for GNU packages:

    $ ./configure --prefix=/usr/local
    $ make
    $ make install


This library is used in
  GNU coreutils
  GNU gettext
  GNU clisp


To integrate this library into your package:
- Either from this package. See file INTEGRATE.
- Or from gnulib. See
  <https://www.gnu.org/software/gnulib/MODULES.html#module=localcharset>


Distribution:
    The libcharset directory of
    ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

Homepage:
    https://haible.de/bruno/packages-libcharset.html


Bruno Haible <bruno@clisp.org>
