Markus Kettunen added the comment:
> On Linux, std::wcout doesn't use wprintf(). Do you mean that std::wcout also
> depends on the "mode" of stdout (_setmode)?
Yes, exactly. I originally noticed this bug by using
Markus Kettunen added the comment:
It's quite common to use wide character strings to support Unicode in C and C++.
In C++ this often means using std::wstring and std::wcout. Maybe these are more
common than wprintf? In any case the console output breaks as Py_Initialize
hijacks the
Markus Kettunen added the comment:
If the standard streams are not used through Python, this hack can be used to
work around the bug on C side:
#ifdef WIN32
#include
#endif
...
Py_Initialize();
#ifdef WIN32
_setmode(stdin->_file, O_TEXT);
_setmode(stdout->_file, O_TEXT);
_setmode(
New submission from Markus Kettunen:
In a C application on Windows, at least on MSVC 2010 and Windows 7, do this:
wprintf(L"Test\n");
Py_Initialize();
wprintf(L"Test\n");
Output is:
Test
T e s t
I was able to track the issue to fileio.c to the following code block by
sea