Why are certain Unicode characters causing std::wcout to fail in a console app?

前端 未结 2 1417
南方客
南方客 2020-11-29 11:23

Consider the following code snippet, compiled as a Console Application on MS Visual Studio 2010/2012 and executed on Win7:

#include \"stdafx.h\"
#include <         


        
2条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-29 11:39

    Setting the mode for stdout to _O_U16TEXT will allow you to write Unicode characters to the wcout stream as well as wprintf. (See Conventional wisdom is retarded, aka What the @#%&* is _O_U16TEXT?) This is the right way to make this work.

    _setmode(_fileno(stdout), _O_U16TEXT);
    
    std::wcout << L"hello\xf021test!" << std::endl;
    std::wcout << L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd" << std::endl;
    std::wcout << L"Now this prints!" << std::endl;
    

    It shouldn't be necessary anymore but you can reset a stream that has entered an error state by calling clear:

    if (std::wcout.fail())
    {
        std::wcout.clear();
    }
    

提交回复
热议问题