一部の環境ではstd::string内部的に UTF-8 を使用していることを読みました。一方、私のプラットフォームである Windows では、std::stringASCII のみです。この動作は、 を使用して変更できますstd::locale。私のバージョンの STL には、文字列で使用する UTF-8 ファセットがないか、少なくとも見つかりません。fstreamただし、一連のクラスで使用するためのファセットがあります。
編集:「内部で UTF-8 を使用する」と言うときstd::basic_filebuf::open()、一部の環境ではUTF-8エンコードされた文字列を受け入れるなどのメソッドを参照しています。これは実際にはstd::string問題ではなく、一部の OS がUTF-8ネイティブで使用していることを知っています。私の質問は、「実装は無効なシーケンスのコード変換をどのように処理しますか?」と読む必要があります。
これらのストリームは、他のプラットフォーム/実装で無効なコード シーケンスをどのように処理しますか?
私UTF8 facetの for ファイルでは、単純にエラーが返されるため、それ以上ストリームが読み取られなくなります。エラーを Unicode の "Invalid char" 0xfffd 値に変更する方が良いと思いました。
私の質問は に限定されません。UTF-8無効なUTF-16サロゲート ペアはどうですか?
例を挙げましょう。toUTF-8でエンコードされたファイルを開くとします。無効なシーケンスは実装でどのように処理されますか? または、 aに出力して、今回は単独のサロゲートを使用します。UTF-8wchar_t localeUTF-8std::wstringstd::cout