C++/標準ライブラリ/codecvt
表示
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>
ヘッダーを利用した新しい仕組みが推奨されています。