wcstombs documentation says, it \"converts the sequence of wide-character codes to multibyte string\". But it never says what is a \"wide-character\".
Is it implici
You use the setlocale()
standard function with the LC_CTYPE
(or LC_ALL
) category to set the mapping the library uses between wchar_t
characters and multibyte characters. The actual locale name passed to setlocale()
is implementation defined, so you'll need to look it up in your compiler's docs.
For example, with MSVC you might use
setlocale( LC_ALL, ".1252" );
to set the C runtime to use codepage 1252 as the multibyte character set. Note that MSVC docs explicitly indicates that the locale cannot be set to UTF-7 or UTF8 for the multibyte character sets:
The set of available languages, country/region codes, and code pages includes all those supported by the Win32 NLS API except code pages that require more than two bytes per character, such as UTF-7 and UTF-8. If you provide a code page like UTF-7 or UTF-8, setlocale will fail, returning NULL.
The "wide-character" wchar_t
type is intended to be able to support any character set the system supports - the standard doesn't define the size of a wchar_t
type (it could be as small as a char
or any of the larger integer types). On Windows it's the system's 'internal' Unicode encoding, which is UTF-16 (UCS-2 before WinXP). Honestly, I can't find a direct quote on that in the MSVC docs, though. Strictly speaking, the implementation should call this out, but I can't find it.