STL でのプラットフォームに依存しない UTF8 とワイド文字変換
std::string と std::wstring の UTF8 文字列間の変換は、ワイド文字を使用する場合の一般的な要件。 MultiByteTowideChar のようなプラットフォーム固有の関数は存在しますが、複数のオペレーティング システムを対象とするコードには適していません。
C 11 以降のソリューション
C 11 では、標準ライブラリでは、std::codecvt による文字変換のサポートが導入されました。これにより、次のコードを使用してプラットフォームに依存しない UTF8 変換が可能になります:
// UTF-8 to UTF-16 std::string utf8Source; std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; std::u16string utf16Dest = convert.from_bytes(utf8Source); // UTF-16 to UTF-8 std::u16string utf16Source; std::string utf8Dest = convert.to_bytes(utf16Source);
その他のアプローチ
他の回答で述べたように、代替アプローチが存在します:
適切なアプローチの選択
変換方法の選択は、プロジェクトの要件と依存関係によって異なります。 C 11 の std::codecvt は、シンプルさと移植性を優先するプロジェクトに推奨されます。複雑なニーズやプラットフォーム固有のニーズについては、Boost.Locale または iconv を検討してください。
以上がC でプラットフォームに依存しない UTF8 とワイド文字変換を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。