By default, it won't convert your wide characters to anything, since it doesn't know what you're expecting: it supports a lot more than UTF-8 (for example, you could request GB18030 output)
On operating systems that provide support Unicode support in C++, such as Linux, you would have to imbue the right locale:
The issue is that if you're on Windows, you're using the Windows console, and to change the behavior of that console, you need to interact with Windows in a non-portable way.
You might have luck if you try piping your output to a file, however.
@Cubbi: Really? How does that work? I thought that the wide output streams were just type aliases for basic_ostream with CharT=whcar_t, where does the overload for operator<< with narrow characters come in?
@LB a file is always a sequence of bytes, basic_ostream<wchar_t>'s operator<< takes a wchar_t, converts it into one or more bytes and stores them into the file/stdout/socket/etc.
cout (by default) just sends the bytes you give it to the OS to display. And the way the OS interprets those bytes is usually tunable - through locale settings on Unix systems, or through codepages on Windows.
If you redirect the output of a program to a file, you will capture those bytes as-is.
@LB they can do that, along with many other conversions. For example, that's what std::wostream is doing in my example above ( http://www.cplusplus.com/forum/beginner/126557/#msg685301 ) on a Windows platform (where wchar_t is 16 bit)