wcout
, or to be precise, a wfilebuf
instance it uses internally, converts wide characters to narrow characters, then writes those to the file (in your case, to stdout
). The conversion is performed by the codecvt
facet in the stream's locale; by default, that just does wctomb_s
, converting to the system default ANSI codepage, aka CP_ACP
.
Apparently, character 'xf021'
is not representable in the default codepage configured on your system. So the conversion fails, and failbit
is set in the stream. Once failbit
is set, all subsequent calls fail immediately.
I do not know of any way to get wcout
to successfully print arbitrary Unicode characters to console. wprintf
works though, with a little tweak:
#include <fcntl.h>
#include <io.h>
#include <string>
const std::wstring test = L"helloxf021test!";
int _tmain(int argc, _TCHAR* argv[])
{
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(test.c_str());
return 0;
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…