2017-12-07 35 views
0

C++ 11以降では、文字列リテラルに接頭辞u8を使用すると、UTF-8でエンコードされたchar(バイト)のシーケンスを作成できます。出力UTF-8(u8)std :: string

どのようにして出力を行うそれらの配列std::ostreamに?どのように出力されるべきconst char *またはstd:stringではなく、デフォルトのエンコードよりも、UTF-8でエンコードされた文字が含まれていることをstd::ostreamを教えていますか?

+0

、私は(https://stackoverflow.com/a/17106065/545127)[標準C++でのUnicodeのサポートはひどい]ことを学んでいます。 STRING'をバイト(char' 'につき1バイト)のシーケンスとしてではなく、プラットフォームのエンコーディングの文字の配列より: – Raedwald

答えて

1

あなたにはありません。ストリームは、テキストのエンコーディングが何であるかを知らないか、気にしません。それの名前にもかかわらず、charは、プラットフォームのエンコーディングでエンコードされた文字を含むようstd:ostreamによって処理されていません。書き込まれるバイトとしてcharを処理する必要があります。これは、これを変更するファセットでそれを埋め込まないと仮定して、与えられた通りの "テキスト"(バイトシーケンス)を書き込みます(おそらく実行の外に\nの変換を行います)。 UTF-8に準拠した文字を書くと、それが出力に終わる。うつ病、bemusement、そして怒りの混合物で

+0

あなたは'のstd :: ostream'は 'STDを扱うことを言っていますか? – Raedwald

+0

@ Raedwald:はい。それはちょうど 'char'のシーケンスです。それ以外に何を入力として扱いますか? –