 
 utf8_codecvt_facet
template<
    typename InternType = wchar_t, 
    typename ExternType = char
> utf8_codecvt_facet
The C++ Standard IOStreams provides the std::codecvt facet to handle specifically these cases. On reading from or writing to a file, the std::basic_filebuf can call out to the codecvt facet to convert data representations from external format (ie. UTF-8) to internal format (ie. UCS-4) and vice-versa. utf8_codecvt_facet is a specialization of std::codecvt specifically designed to handle the case of translating between UTF-8 and UCS-4.
| Parameter | Description | Default | 
|---|---|---|
| InternType | The internal type used to represent UCS-4 characters. | wchar_t | 
| ExternType | The external type used to represent UTF-8 octets. | char_t | 
  //...
  // My encoding type
  typedef wchar_t ucs4_t;
  std::locale old_locale;
  std::locale utf8_locale(old_locale,new utf8_codecvt_facet<ucs4_t>);
  // Set a New global locale
  std::locale::global(utf8_locale);
  // Send the UCS-4 data out, converting to UTF-8
  {
    std::wofstream ofs("data.ucd");
    ofs.imbue(utf8_locale);
    std::copy(ucs4_data.begin(),ucs4_data.end(),
          std::ostream_iterator<ucs4_t,ucs4_t>(ofs));
  }
  // Read the UTF-8 data back in, converting to UCS-4 on the way in
  std::vector<ucs4_t> from_file;
  {
    std::wifstream ifs("data.ucd");
    ifs.imbue(utf8_locale);
    ucs4_t item = 0;
    while (ifs >> item) from_file.push_back(item);
  }
  //...
| Copyright © 2001 | Ronald Garcia,
Indiana University 
(garcia@osl.iu.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu) | 
© Copyright Robert Ramey 2002-2004. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)