Мне нужен точный Unicode-вывод на консоль. Если я добавлю wcout к «en_US.UTF8», символы будут сопоставлены с UTF-8, но они не будут правильно отображаться на консоли. Поэтому я написал небольшую вспомогательную функцию:
void writeOutput( wchar_t const *str, bool err )
{
static mutex mtx;
lock_guard<mutex> lock( mtx );
wstringstream wss;
wss << str << L"\n";
wstring strFmt = move( wss.str() );
DWORD dwWritten;
WriteConsoleW( GetStdHandle( !err ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE ), strFmt.c_str(), wcslen( strFmt.c_str() ), &dwWritten, nullptr );
}
Эта функция правильно отображает символы Юникода. Но если я делаю перенаправление ввода / вывода с помощью «program> outfile», в файле ничего не записывается. Итак, как мне определить, есть ли перенаправление?