類模板
<codecvt>

std::codecvt_utf16

template < class Elem, unsigned long MaxCode = 0x10ffffUL, codecvt_mode Mode = (codecvt_mode)0 >  class codecvt_utf16 : public codecvt <Elem, char, mbstate_t>
轉換 UTF-16

在 UTF-16 編碼的多位元組序列與它們對應的、固定寬度字元型別Elem(UCS-2 或 UCS-4)的序列之間進行轉換。

請注意,如果Elem 是 32 位寬字元型別(例如char32_t),並且MaxCode0x10ffff,則執行的是 UTF-16 與 UTF-32 之間的轉換。有關 UTF-16 和 UTF-8 之間的轉換,請參見 codecvt_utf8_utf16

該 facet 使用Elem 作為其內部字元型別,並使用char作為其外部字元型別(編碼為 UTF-16)。因此
  • 成員 in 將 UTF-16 轉換為其固定寬度的字元等效項。
  • 成員 out 將固定寬度的寬字元編碼轉換為 UTF-16。

模板引數

Elem
內部字元型別,其成員別名為intern_type。這應是一個寬字元型別wchar_t, char16_tchar32_t.
對於 16 位寬字元,成員 in 中超出基本多語言平面的字元可能會導致轉換錯誤。
該 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_utf16codecvt 繼承

成員型別定義說明
intern_type第一個模板引數 (Elem)內部字元型別(寬字元型別)。
extern_typechar外部字元型別(多位元組字元型別)。
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-16 轉換為固定寬度的等效項,型別為Elem.
do_length返回長度(用於 codecvt::length)。
do_max_length返回程式碼點的最大長度(以位元組為單位)。
do_out從固定寬度的寬字元編碼(UCS-2 / UCS-4)轉換為 UTF-16。
do_unshiftmbstate_t 物件帶到初始狀態。
(解構函式)釋放資源。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// codecvt_utf16: writing UTF-32 string as UTF-16
#include <iostream>
#include <locale>
#include <string>
#include <codecvt>
#include <fstream>

int main ()
{
  std::u32string str ( U"\U00004f60\U0000597d" );  // ni hao (你好)

  std::locale loc (std::locale(), new std::codecvt_utf16<char32_t>);
  std::basic_ofstream<char32_t> ofs ("test.txt");
  ofs.imbue(loc);

  std::cout << "Writing to file (UTF-16)... ";
  ofs << str;
  std::cout << "done!\n";

  return 0;
}

輸出
Writing to file (UTF-16)... done!


另見