【发布时间】:2020-02-09 14:44:31
【问题描述】:
我需要精确的 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 );
}
此函数正确显示 Unicode 字符。但是,如果我使用“program > outfile”进行 I/O 重定向,则文件中不会写入任何内容。那么如何检测是否存在重定向?
【问题讨论】:
-
您应该 set UTF-8 in the manifest 并使用常规 i/o,而不是使用 UTF-8 语言环境。
-
在 Windows 上,通常可以使用
GetFileType()或GetConsoleMode()检测重定向。 StackOverflow 上有几个问题讨论了这个问题(用其他语言),例如this one。 -
您好 Bonita Montero,如果它解决了您的问题,您可以 accept the answer。
标签: winapi