类模板
<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;
宽字符串转换
使用类型为 Codecvt转换对象,在宽字符串字节字符串(双向)之间执行转换。

该对象获得转换对象的所有权,并负责在某个时候(当自身被销毁时)删除它。

模板参数

Codecvt
转换对象的类型:这应该是一个类,具有与 codecvt 区域设置面相同的属性,例如头文件 <codecvt> 中定义的标准类之一。
Elem
宽字符类型。
这应对应于 codecvt-类转换对象内部类型
Wide_alloc
类型为 Elem 的元素的分配器,用作宽字符串类型的模板参数。
默认为:allocator<Elem>
Byte_alloc
类型为 char 的元素的分配器,用作字节字符串类型的模板参数。
默认为:allocator<char>

对象状态

对象在内部存储以下数据元素
类型描述
byte_string发生错误时返回的字节字符串
wide_string发生错误时返回的宽字符串
Codecvt*指向转换对象的指针
state_type转换状态对象,通过成员 state 访问
size_t转换计数,通过成员 converted 访问

成员类型

成员类型定义说明
byte_stringbasic_string<char,char_traits<char>,Byte_alloc>窄字符串类型
wide_stringbasic_string<Elem,char_traits<Elem>,Wide_alloc>宽字符串类型
state_typeCodecvt::state_type
int_typechar_traits<Elem>::int_type

成员函数


转换


观察器


示例

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;
}

输出

UTF-32: [4f60][597d]
UTF-8 : [e4][bd][a0][e5][a5][bd]