最終更新日時:
が更新

履歴 編集

class template
<codecvt>

std::codecvt_utf16(C++11)

namespace std {
  template <class Elem, unsigned long Maxcode = 0x10ffff,
            codecvt_mode Mode = (codecvt_mode)0>
  class codecvt_utf16 : public codecvt<Elem, char, mbstate_t> {
    // 未規定...
  };
}

概要

UTF-16との変換を行うファセットクラス。char列とElem列との間で、以下のようにエンコーディングの変換を行う機能を有する。

  • char: UTF-16エンコーディングのマルチバイト文字列。
  • Elem: UCS-2またはUCS-4 (UTF-32)。char16_tなど2バイトの型を指定するとUCS-2、char32_tなど4バイトの型を指定するとUCS-4として扱われる。

BOMの有無やエンディアンなどをcodecvt_modeで指定できる。

#include <codecvt>
#include <string>
#include <cassert>
#include <locale>

int main()
{
  std::wstring_convert<std::codecvt_utf16<char32_t>, char32_t> converter;

  // UCS-4/UTF-32からUTF-16に変換
  std::u32string u32str = U"\U0001F359";
  std::string u16str = converter.to_bytes(u32str);

  assert(u16str.size() == 4);
  assert(u16str[0] == '\xd8');
  assert(u16str[1] == '\x3c');
  assert(u16str[2] == '\xdf');
  assert(u16str[3] == '\x59');

  // UTF-16からUCS-4/UTF-32に変換
  std::u32string restored = converter.from_bytes(u16str);
  assert(u32str == restored);
}

出力

上記プログラムは何も出力しない。

バージョン

言語

  • C++11

処理系

参照