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
1 2 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]
|