Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

codecvt_utf8_utf16

类模板;  <codecvt>
template < class Elem, unsigned long MaxCode = 0x10ffffUL, codecvt_mode Mode = (codecvt_mode)0 >
  class codecvt_utf8_utf16 : public codecvt <Elem, char, mbstate_t>

UTF-8和UTF-16之间的转换
locale::facet codecvtcodecvt_16
codecvt_base
UTF-8和UTF-16编码之间的多字节序的转换。
在UTF-8编码的多字节序列和Elem类型的等效固定宽字符序列(UCS-2或UCS-4)之间进行转换。

平台使用Elem作为其内部字符类型(编码为UTF-16),使用char作为其外部字符类型(编码为UTF-8)。因此:

☲  模板参数


Elem
内部字符类型,成员intern_type的别名。这应该是一个宽字符类型:wchar_t、char16_t或char32_t。
对于32位宽的字符,字符的转换导致每个宽字符存储一个UTF-16代码单元(作为32位值)。
外部字符类型在这个平台中总是char。

MaxCode
将被转换而不报告转换错误的最大目标编码。
Mode
codecvt_mode类型的位掩码值:
标签 说明
consume_header 4 读取可选的初始头序列(BOM)以确定转换的多字节序列是大端序还是小端序。
generate_header 2 生成一个初始头序列(BOM)来指示转换出来的多字节序列是大端序还是小端序。
little_endian 1 输出转换时生成的多字节序列应该是小端序(与默认的大端序相反)。

☞ 成员类型



以下是codecvt_utf8_utf16的成员类型的别名,从codecvt继承而来:
成员类型 定义 注释
intern_type 第一个模板参数(Elem) 内部字符类型(宽字符类型)。
extern_type char 外部字符类型(多字节字符类型)。
state_type mbstate_t 转换状态类型(参见mbstate_t)。
result codecvt_base::result 具有转换操作的结果的枚举类型(请参阅codecvt_base::result)。

☞ 从codecvt继承的公共成员函数



(constructor) codecvt 构造函数 (公众成员函数)
in 将UTF-8转换为等效的固定宽度字符(公众成员函数)
out 将固定宽度的宽字符编码转换为UTF-8(公众成员函数)
unshift unshift的转换状态(公众成员函数)

字符编码属性:
always_noconv 返回noconv特征(公共静态成员函数)
encoding 返回编码宽度(公共静态成员函数)
length 返回转换后序列的长度(公共静态成员函数)
max_length 返回一个字符的最大长度(公共静态成员函数)

☞ 虚拟受保护成员函数



类通过其虚保护成员函数定义其功能:
成员函数 codecvt_utf16表现
do_always_no_conv 返回0(并非所有转换都会产生noconv结果)。
do_encoding 返回0(外部编码不是固定宽度)。
do_in 将UTF-8转换为UTF-16。
do_length 返回长度(对于codecvt::length)。
do_max_length 返回目标编码的最大长度(以字节为单位)。
do_out 将UTF-16转换为UTF-8。
do_unshift 使mbstate_t对象处于初始状态。
(destructor) 释放资源

☣  示例



// codecvt_utf8_utf16 example
#include <iostream>
#include <locale>
#include <string>
#include <codecvt>

int main ()
{
  std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> conversion;
  std::string mbs = conversion.to_bytes( u"\u4f60\u597d" );  // ni hao (你好)

  // print out hex value of each byte:
  std::cout << std::hex;
  for (int i=0; i<mbs.length(); ++i)
    std::cout << int(unsigned char(mbs[i])) << ' ';
  std::cout << '\n';

  return 0;
}

输出:
e4 bd a0 e5 a5 bd

🍄  另请参阅



codecvt 编码转换平台(类模板)
codecvt_utf16 转换为utf - 16 (类模板)
codecvt_utf8 转换为utf - 8 (类模板)

联系我们 免责声明 关于CandCplus 网站地图