類模板
<codecvt>

std::codecvt_utf8_utf16

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 之間進行轉換

在 UTF-8 和 UTF-16 編碼的多位元組序列之間進行轉換。

該區域使用 Elem 作為其 內部字元型別(編碼為 UTF-16),並使用char作為其 外部字元型別(編碼為 UTF-8)。因此,

模板引數

Elem
內部字元型別,其成員別名為intern_type。這應是一個寬字元型別wchar_t, char16_tchar32_t.
對於 32 位寬字元,成員 in 的轉換會將每個寬字元(作為 32 位值)儲存一個 UTF-16 程式碼單元。
該 facet 的 外部字元型別始終是char.
MaxCode
在不報告轉換錯誤的情況下將被翻譯的最大程式碼點。
Mode
型別為 codecvt_mode 的位掩碼值
標籤描述
consume_header4可選的初始頭部序列(BOM)將被讀取,以確定多位元組序列 在轉換 in 時是big-endian還是little-endian。
generate_header2應生成一個初始頭部序列(BOM),以指示多位元組序列 在轉換 out 時是big-endian還是little-endian。
little_endian1轉換 out 時生成的多位元組序列應為 little-endian(與預設的 big-endian 相反)。

成員型別

以下別名是codecvt_utf8_utf16codecvt 繼承

成員型別定義說明
intern_type第一個模板引數 (Elem)內部字元型別(編碼為 UTF-16)。
extern_typechar外部字元型別(編碼為 UTF-8)。
state_typembstate_t轉換狀態型別(參見 mbstate_t)。
resultcodecvt_base::result具有轉換操作結果的列舉型別(請參閱 codecvt_base::result)。

codecvt 繼承的公共成員函式


轉換函式:

字元編碼屬性:

虛保護成員函式

該類透過其虛保護成員函式實現其功能
成員函式,逐個字元列印字串的內容行為 incodecvt_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_unshiftmbstate_t 物件帶到初始狀態。
(解構函式)釋放資源。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 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 


另見