class template
<locale>
std::wstring_convert
template < class Codecvt,
           class Elem = wchar_t,
           class Wide_alloc = std::allocator<Elem>,
           class Byte_alloc = std::allocator<char> > class wstring_convert;
Convert to/from wide string
Performs conversions between wide strings and byte strings (on either direction) using a conversion object of type Codecvt.
The object acquires ownership of the conversion object, becoming responsible for its deletion at some point (when it is itself destroyed).
Template parameters
- Codecvt
- Type of the conversion object: This shall be a class with the same properties as the codecvt locale facet, such as one of the standard classes defined in header <codecvt>.
 
- Elem
- Wide character type.
 This shall correspond to the internal type of the codecvt-like conversion object.
- Wide_alloc
- Allocator for elements of type Elem, used as template argument for the wide string type.
 Defaults to:allocator<Elem>
- Byte_alloc
- Allocator for elements of type char, used as template argument for the byte string type.
 Defaults to:allocator<char>
Object state
The object stores internally the following data elements:
| type | description | 
|---|
| byte_string | A byte string to return on errors | 
| wide_string | A wide string to return on errors | 
| Codecvt* | A pointer to a conversion object | 
| state_type | A conversion state object, accessed with member state | 
| size_t | A conversion count, accessed with member converted | 
Member functions
- (constructor)
- Construct wstring_convert (public member function
)
- (destructor)
- Destroy wstring_convert (public member function
)
Conversion:
- from_bytes
- Convert from bytes (public member function
)
- to_bytes
- Convert to bytes (public member function
)
Observers:
- converted
- Conversion count (public member function
)
- state
- Conversion shift state (public member function
)
Example
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | // converting from UTF-32 to UTF-8
#include <iostream>       // std::cout, std::hex
#include <string>         // std::string, std::u32string
#include <locale>         // std::wstring_convert
#include <codecvt>        // std::codecvt_utf8
#include <cstdint>        // std::uint_least32_t
int main ()
{
  std::u32string str32 ( U"\U00004f60\U0000597d" );  // ni hao (你好)
  std::string str8;
  std::wstring_convert<std::codecvt_utf8<char32_t>,char32_t> cv;
  str8 = cv.to_bytes(str32);
  // print contents (as their hex representations):
  std::cout << std::hex;
  std::cout << "UTF-32: ";
  for (char32_t c : str32)
    std::cout << '[' << std::uint_least32_t(c) << ']';
  std::cout << '\n';
  std::cout << "UTF-8 : ";
  for (char c : str8)
    std::cout << '[' << int(static_cast<unsigned char>(c)) << ']';
  std::cout << '\n';
  return 0;
}
 |  | 
Output:
| 
UTF-32: [4f60][597d]
UTF-8 : [e4][bd][a0][e5][a5][bd]
 |