コンテンツにスキップ

C++/標準ライブラリ/codecvt

出典: フリー教科書『ウィキブックス(Wikibooks)』

C++標準ライブラリヘッダー <codecvt> の解説 (非推奨)[編集]

このセクションは、C++標準ライブラリの <codecvt> ヘッダーについて、非推奨とされた部分の説明になります。<codecvt> ヘッダーは、文字エンコード間の変換を行うためのファセットを提供していましたが、C++17 で非推奨となり、C++26 で削除される予定です。

D.26.1 概要 (General)[編集]

<codecvt> ヘッダーは、様々な文字エンコードに対応するコード変換ファセットを提供していました。これらのファセットを利用することで、プログラム内において異なるエンコード間の文字列変換を行うことができたのです。

D.26.2 ヘッダー <codecvt> のシンタックス (Synopsis)[編集]

このセクションでは、<codecvt> ヘッダー内に含まれていた主要なクラスと列挙型について説明します。

  • codecvt_mode 列挙型: エンコード変換時のモードを指定します。
    • consume_header: マルチバイトシーケンス読み込み時に、最初にヘッダー情報を読み込むかどうかを指定します。
    • generate_header: マルチバイトシーケンス書き込み時に、最初にヘッダー情報を書き込むかどうかを指定します。
    • little_endian: リトルエンディアン順序でエンコードを行うかどうかを指定します (デフォルトはビッグエンディアン)。
  • codecvt_utf8: UTF-8 エンコードと UCS-2/UTF-32 (Elem の型による) 間の変換を行うためのファセットです。
  • codecvt_utf16: UTF-16 エンコードと UCS-2/UTF-32 ( Elem の型による) 間の変換を行うためのファセットです。
  • codecvt_utf8_utf16: UTF-8 エンコードと UTF-16 エンコード間の変換を行うためのファセットです。

注意: このセクションで紹介したクラスと列挙型は、C++17 で非推奨となり、今後利用すべきではありません。

D.26.3 要求事項 (Requirements)[編集]

このセクションでは、非推奨となった codecvt_utf8, codecvt_utf16, codecvt_utf8_utf16 ファセットに対する当時の仕様上の要求事項が列挙されています。内容としては、

  • 変換対象のワイド文字型 (Elem) や最大対応コード値 (Maxcode)
  • codecvt_mode フラグによる動作の違い (ヘッダー情報の処理、エンディアン順序)
  • 各ファセットごとの変換対象エンコード (UTF-8, UTF-16, UCS-2/UTF-32)
  • 書き込み時のファイル形式 (テキストファイルかバイナリファイルか)

などが記載されています。

こちらも繰り返しになりますが、これらのファセットは非推奨であり、新しいコードを書く際には利用すべきではありません。

C++17 以降の文字エンコード変換については、<codecvt> ヘッダーではなく、<locale> ヘッダーを利用した新しい仕組みが推奨されています。