1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- .\" Copyright (c) Bruno Haible <bruno@clisp.org>
- .\"
- .\" This is free documentation; you can redistribute it and/or
- .\" modify it under the terms of the GNU General Public License as
- .\" published by the Free Software Foundation; either version 3 of
- .\" the License, or (at your option) any later version.
- .\"
- .\" References consulted:
- .\" GNU glibc-2 source code and manual
- .\" OpenGroup's Single Unix specification http://www.UNIX-systems.org/online.html
- .\"
- .TH ICONV 3 "September 7, 2008" "GNU" "Linux Programmer's Manual"
- .SH NAME
- iconv \- perform character set conversion
- .SH SYNOPSIS
- .nf
- .B #include <iconv.h>
- .sp
- .BI "size_t iconv (iconv_t " cd ,
- .BI " const char* * " inbuf ", size_t * "inbytesleft ,
- .BI " char* * " outbuf ", size_t * "outbytesleft );
- .fi
- .SH DESCRIPTION
- The argument \fIcd\fP must be a conversion descriptor created using the
- function \fBiconv_open\fP.
- .PP
- The main case is when \fIinbuf\fP is not NULL and \fI*inbuf\fP is not NULL.
- In this case, the \fBiconv\fP function converts the multibyte sequence
- starting at \fI*inbuf\fP to a multibyte sequence starting at \fI*outbuf\fP.
- At most \fI*inbytesleft\fP bytes, starting at \fI*inbuf\fP, will be read.
- At most \fI*outbytesleft\fP bytes, starting at \fI*outbuf\fP, will be written.
- .PP
- The \fBiconv\fP function converts one multibyte character at a time, and for
- each character conversion it increments \fI*inbuf\fP and decrements
- \fI*inbytesleft\fP by the number of converted input bytes, it increments
- \fI*outbuf\fP and decrements \fI*outbytesleft\fP by the number of converted
- output bytes, and it updates the conversion state contained in \fIcd\fP.
- If the character encoding of the input is stateful, the \fBiconv\fP 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 \fIshift sequence\fP.
- The conversion can stop for four reasons:
- .PP
- 1. An invalid multibyte sequence is encountered in the input. In this case
- it sets \fBerrno\fP to \fBEILSEQ\fP and returns (size_t)(\-1). \fI*inbuf\fP
- is left pointing to the beginning of the invalid multibyte sequence.
- .PP
- 2. The input byte sequence has been entirely converted, i.e. \fI*inbytesleft\fP
- has gone down to 0. In this case \fBiconv\fP returns the number of
- non-reversible conversions performed during this call.
- .PP
- 3. An incomplete multibyte sequence is encountered in the input, and the
- input byte sequence terminates after it. In this case it sets \fBerrno\fP to
- \fBEINVAL\fP and returns (size_t)(\-1). \fI*inbuf\fP is left pointing to the
- beginning of the incomplete multibyte sequence.
- .PP
- 4. The output buffer has no more room for the next converted character. In
- this case it sets \fBerrno\fP to \fBE2BIG\fP and returns (size_t)(\-1).
- .PP
- A different case is when \fIinbuf\fP is NULL or \fI*inbuf\fP is NULL, but
- \fIoutbuf\fP is not NULL and \fI*outbuf\fP is not NULL. In this case, the
- \fBiconv\fP function attempts to set \fIcd\fP's conversion state to the
- initial state and store a corresponding shift sequence at \fI*outbuf\fP.
- At most \fI*outbytesleft\fP bytes, starting at \fI*outbuf\fP, will be written.
- If the output buffer has no more room for this reset sequence, it sets
- \fBerrno\fP to \fBE2BIG\fP and returns (size_t)(\-1). Otherwise it increments
- \fI*outbuf\fP and decrements \fI*outbytesleft\fP by the number of bytes
- written.
- .PP
- A third case is when \fIinbuf\fP is NULL or \fI*inbuf\fP is NULL, and
- \fIoutbuf\fP is NULL or \fI*outbuf\fP is NULL. In this case, the \fBiconv\fP
- function sets \fIcd\fP's conversion state to the initial state.
- .SH "RETURN VALUE"
- The \fBiconv\fP function returns the number of characters converted in a
- non-reversible way during this call; reversible conversions are not counted.
- In case of error, it sets \fBerrno\fP and returns (size_t)(\-1).
- .SH ERRORS
- The following errors can occur, among others:
- .TP
- .B E2BIG
- There is not sufficient room at \fI*outbuf\fP.
- .TP
- .B EILSEQ
- An invalid multibyte sequence has been encountered in the input.
- .TP
- .B EINVAL
- An incomplete multibyte sequence has been encountered in the input.
- .SH "CONFORMING TO"
- POSIX:2001
- .SH "SEE ALSO"
- .BR iconv_open (3),
- .BR iconvctl (3)
- .BR iconv_close (3)
|