1. ホーム
  2. c++

[解決済み] 非推奨のヘッダ <codecvt> の置き換え

2023-07-03 14:03:36

質問

前置きが長くなりましたが、私のタスクは UTF-8 XML ファイルを UTF-16 に変換することでした (もちろん、適切なヘッダー付きです)。そして、UTF-8 を UTF-16 に変換する通常の方法について検索したところ、以下のテンプレートを使用する必要があることがわかりました。 <codecvt> .

しかし、今度はそれが 非推奨 が廃止された今、同じタスクを行うための新しい一般的な方法は何なのでしょうか?

(Boostを使うのは全然構わないのですが、それ以外はなるべく標準ライブラリに近い方がいいです)

どのように解決するのですか?

std::codecvt からのテンプレート <locale> 自体は非推奨ではありません。UTF-8 から UTF-16 へは、まだ std::codecvt<char16_t, char, std::mbstate_t> の特殊化があります。

しかし std::wstring_convertstd::wbuffer_convert は標準の変換ファセットとともに非推奨とされ、ファセットを使って 文字列を変換する簡単な方法はありません。

というわけで、Bolasがすでに回答しているように 自分で実装するか(あるいはいつものようにサードパーティライブラリを使うか)、非推奨のAPIを使い続けるかです。