In C++11 and later, using the u8
prefix on a string literal can create char
(byte) sequences that are UTF-8 encoded.
How do you output those sequences to a std::ostream
? How do you tell a std::ostream
that a const char *
or std:string
to be output contains characters encoded in UTF-8, rather than the default encoding?
You don't. The stream does not know or care what the encoding of the text is. Despite it's name, a
char
is not treated bystd:ostream
as containing a character encoded in the platform encoding. It must treats achar
as a byte to be written out. It writes the "text" (byte sequence) as given (outside of possibly performing\n
translation), assuming you don't imbue it with a facet that changes this. If you write characters that conform to UTF-8, then that's what ends up in the output.