Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ICONV(3)		    Library Functions Manual			ICONV(3)

NAME
     iconv - perform character set conversion

SYNOPSIS
     #include <iconv.h>

     size_t iconv (iconv_t cd,
		   const char* * inbuf, size_t * inbytesleft,
		   char* * outbuf, size_t * outbytesleft);

DESCRIPTION
     The  argument cd must be a conversion descriptor created using the function
     iconv_open.

     The main case is when inbuf is not NULL and *inbuf is not	NULL.	In  this
     case, the iconv function converts the multibyte sequence starting at *inbuf
     to  a  multibyte sequence starting at *outbuf.  At most *inbytesleft bytes,
     starting at *inbuf, will be read.	At most *outbytesleft bytes, starting at
     *outbuf, will be written.

     The iconv function converts one multibyte character at a time, and for each
     character conversion it increments *inbuf and  decrements	*inbytesleft  by
     the  number  of converted input bytes, it increments *outbuf and decrements
     *outbytesleft by the number of converted output bytes, and it  updates  the
     conversion  state	contained in cd.  If the character encoding of the input
     is stateful, the iconv function can also convert a sequence of input  bytes
     to  an  update  of the conversion state without producing any output bytes;
     such input is called a shift sequence.  The conversion can  stop  for  five
     reasons:

     1.  An invalid multibyte sequence is encountered in the input. In this case
     it sets errno to EILSEQ and returns (size_t)(-1). *inbuf is  left	pointing
     to the beginning of the invalid multibyte sequence.

     2.  A  multibyte  sequence  is encountered that is valid but that cannot be
     translated to the character encoding of the output.  This condition depends
     on the implementation and on the conversion descriptor.  In the GNU  C  li-
     brary  and GNU libiconv, if cd was created without the suffix //TRANSLIT or
     //IGNORE or //NON_IDENTICAL_DISCARD, the conversion is strict:  lossy  con-
     versions  produce	this condition.  If the suffix //TRANSLIT was specified,
     transliteration can avoid this condition in some cases.  In the musl C  li-
     brary, this condition cannot occur because a conversion to '*' is used as a
     fallback.	 In  the  FreeBSD, NetBSD, and Solaris implementations of iconv,
     this condition cannot occur either, because a conversion to '?' is used  as
     a	fallback.   When this condition is met, the iconv function sets errno to
     EILSEQ and returns (size_t)(-1).  *inbuf is left pointing to the  beginning
     of the unconvertible multibyte sequence.

     3.  The  input byte sequence has been entirely converted, i.e. *inbytesleft
     has gone down to 0. In this case iconv returns the number of non-reversible
     conversions performed during this call.

     4. An incomplete multibyte sequence is encountered in the	input,	and  the
     input byte sequence terminates after it. In this case it sets errno to EIN-
     VAL  and  returns (size_t)(-1). *inbuf is left pointing to the beginning of
     the incomplete multibyte sequence.

     5. The output buffer has no more room for the next converted character.  In
     this case it sets errno to E2BIG and returns (size_t)(-1).

     A different case is when inbuf is NULL or *inbuf is NULL, but outbuf is not
     NULL  and *outbuf is not NULL. In this case, the iconv function attempts to
     set cd's conversion state to the initial state and  store	a  corresponding
     shift  sequence at *outbuf.  At most *outbytesleft bytes, starting at *out-
     buf, will be written.  If the output buffer has no more room for this reset
     sequence, it sets errno to E2BIG and returns (size_t)(-1). Otherwise it in-
     crements *outbuf and decrements *outbytesleft by the number of bytes  writ-
     ten.

     A third case is when inbuf is NULL or *inbuf is NULL, and outbuf is NULL or
     *outbuf  is  NULL.  In  this  case, the iconv function sets cd's conversion
     state to the initial state.

RETURN VALUE
     The iconv function returns the number of characters converted in a  non-re-
     versible  way during this call; reversible conversions are not counted.  In
     case of error, it sets errno and returns (size_t)(-1).

ERRORS
     The following errors can occur, among others:

     E2BIG  There is not sufficient room at *outbuf.

     EILSEQ
	    An invalid multibyte sequence has been encountered in the input.

     EINVAL
	    An incomplete multibyte sequence has been encountered in the input.

CONFORMING TO
     POSIX:2024

NOTES
     In each series of calls to the iconv function, the last should be one  with
     inbuf  or	*inbuf equal to NULL, in order to complete the conversion of any
     partially converted input.

     Although inbuf and outbuf are typed as const char ** and char  **,  respec-
     tively,  this  does not mean that the objects they point can be interpreted
     as C strings or as arrays of characters: the  interpretation  of  character
     byte  sequences is handled internally by the conversion functions.  In some
     encodings, a zero byte may be a valid part of a multibyte character.

     The caller of the iconv function must ensure that the  pointers  passed  to
     the function are suitable for accessing characters in the appropriate char-
     acter  set.  For the encodings UCS-2-INTERNAL, UCS-4-INTERNAL, and wchar_t,
     this includes ensuring correct alignment.

SEE ALSO
     iconv_open(3), iconvctl(3), iconv_close(3)

GNU				December 15, 2024			ICONV(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=iconv&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help