一部の環境ではstd::string
内部的に UTF-8 を使用していることを読みました。一方、私のプラットフォームである Windows では、std::string
ASCII のみです。この動作は、 を使用して変更できます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-8
wchar_t
locale
UTF-8
std::wstring
std::cout