2 .\" The Regents of the University of California. All rights reserved.
4 .\" This code is derived from software contributed to Berkeley by
5 .\" Donn Seeley of BSDI.
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\" notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\" notice, this list of conditions and the following disclaimer in the
14 .\" documentation and/or other materials provided with the distribution.
15 .\" 3. All advertising materials mentioning features or use of this software
16 .\" must display the following acknowledgement:
17 .\" This product includes software developed by the University of
18 .\" California, Berkeley and its contributors.
19 .\" 4. Neither the name of the University nor the names of its contributors
20 .\" may be used to endorse or promote products derived from this software
21 .\" without specific prior written permission.
23 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 .\" @(#)multibyte.3 8.1 (Berkeley) 6/4/93
36 .\" $FreeBSD: src/lib/libc/locale/multibyte.3,v 1.19 2003/02/06 11:04:46 charnier Exp $
47 .Nd multibyte character support for C
53 .Fn mblen "const char *mbchar" "size_t nbytes"
55 .Fn mbstowcs "wchar_t * restrict wcstring" "const char * restrict mbstring" "size_t nwchars"
57 .Fn mbtowc "wchar_t * restrict wcharp" "const char * restrict mbchar" "size_t nbytes"
59 .Fn wcstombs "char * restrict mbstring" "const wchar_t * restrict wcstring" "size_t nbytes"
61 .Fn wctomb "char *mbchar" "wchar_t wchar"
63 The basic elements of some written natural languages such as Chinese
64 cannot be represented uniquely with single C
66 The C standard supports two different ways of dealing with
67 extended natural language encodings,
72 Wide characters are an internal representation
73 which allows each basic element to map
74 to a single object of type
76 Multibyte characters are used for input and output
77 and code each basic element as a sequence of C
79 Individual basic elements may map into one or more
82 bytes in a multibyte character.
86 governs the interpretation of wide and multibyte characters.
89 specifically controls this interpretation.
92 type is wide enough to hold the largest value
93 in the wide character representations for all locales.
95 Multibyte strings may contain
97 indicators to switch to and from
98 particular modes within the given representation.
99 If explicit bytes are used to signal shifting,
100 these are not recognized as separate characters
101 but are lumped with a neighboring character.
102 There is always a distinguished
109 functions assume that multibyte strings are interpreted
110 starting from the initial shift state.
116 functions maintain static shift state internally.
119 pointer returns nonzero if the current locale requires shift states,
121 if shift states are required, the shift state is reset to the initial state.
122 The internal shift states are undefined after a call to
130 For convenience in processing,
131 the wide character with value 0
132 (the null wide character)
133 is recognized as the wide character string terminator,
134 and the character with value 0
136 is recognized as the multibyte character string terminator.
137 Null bytes are not permitted within multibyte characters.
141 function computes the length in bytes
142 of a multibyte character
150 function converts a multibyte character
152 into a wide character and stores the result
153 in the object pointed to by
161 function converts a wide character
163 into a multibyte character and stores
166 The object pointed to by
168 must be large enough to accommodate the multibyte character.
172 function converts a multibyte character string
174 into a wide character string
178 wide characters are stored.
179 A terminating null wide character is appended if there is room.
183 function converts a wide character string
185 into a multibyte character string
191 Partial multibyte characters at the end of the string are not stored.
192 The multibyte character string is null terminated if there is room.
203 functions return nonzero if shift states are supported,
208 then these functions return
209 the number of bytes processed in
211 or \-1 if no multibyte character
212 could be recognized or converted.
216 function returns the number of wide characters converted,
217 not counting any terminating null wide character.
220 function returns the number of bytes converted,
221 not counting any terminating null byte.
222 If any invalid multibyte characters are encountered,
223 both functions return \-1.
248 The current implementation does not support shift states.