最終更新日時: 2024年01月23日 18時14分07秒 (JST)
Akira Takahashi が更新

履歴 編集

<codecvt>

# codecvt(C++11)(C++17で非推奨)(C++26で削除)

`<codecvt>`ヘッダでは、文字コード変換のためのファセットクラスを定義する。

名前 | 説明 | 対応バージョン
--- | --- | ---
`codecvt_mode` | 文字コード変換の設定をするための列挙型(enum) | C++11 C++17から非推奨
`codecvt_utf8` | UTF-8への文字コード変換(class template) | C++11 C++17から非推奨
`codecvt_utf16` | UTF-16への文字コード変換(class template) | C++11 C++17から非推奨
`codecvt_utf8_utf16` | UTF-8とUTF-16間での文字コード変換(class template) | C++11 C++17から非推奨

## 非推奨・削除の詳細

Unicodeの文字コード変換を行うこれらのクラスは、不正なコードポイントに対する安全なエラー処理の方法を提供していなかったため、セキュリティ上の欠陥があった。

仕様もあいまいであったため、不正なコードポイントに対してどのように振る舞うかも不明であった。

Unicode以外のShift_JISやBig5といった文字コードの利用は急激に減少している。標準ライブラリでの現代的なUnicodeの変換機能は非常に必要とされているが、`<codecvt>`の設計はお粗末なものだった。将来より良いものを作るために、これらの機能は非推奨・削除とする。

標準ライブラリにUnicodeの文字コード変換をする代替機能はないため、他の専門特化した文字コード変換のライブラリを使用すること。

## バージョン

### 言語

- C++11

## 参照

- P0618R0 Deprecating `<codecvt>`
- P2871R3 Remove Deprecated Unicode Conversion Facets from C++26