I'm trying to insert a unicode value, in this case, \u250F, or ┏, to the console output. I have searched around, and people recommending a variety of things. Before we discuss on what I tried, I am using Windows and Visual Studio 2013.
The main error
When I try multiple 'fixes', if not specified, I always get the same error:
Debug Assertion Failed!
Program: ...nts\visual studio 2013\Projects\roguelike\Debug\roguelike.exe
File: f:\dd\vctools\crt\crtw32\stdio\fputc.c
Line: 48
Expression: ((_Stream->_flag & _IOSTRG) || ( fn = _fileno(_Stream),
((_textmode_safe(fn) == _IOINFO_TM_ANSI && !_tm_unicode_safe(fn))))
For more information on how your program can cause an assertion failure,
see the Visual C++ documentation on asserts
(Press Retry to debug the application)
What I have tried
I have tried to do all of the following things to output it:
std::cout << "\u250F";
std::wcout << "\u250F";
std::cout << L"\u250F";
std::wcout << L"\u250F";
std::cout << "┏";
std::wcout << "┏";
std::cout << L"┏";
std::wcout << L"┏";
How I tried to tell the console how to output unicode
_setmode(_fileno(stdout), _O_U16TEXT);
Seems to be the problem, really.
system("chcp 65001");
Doesn't error, but doesn't do anything
std::locale::global(std::locale("en_US.utf8"));
It causes an error of where the parameters are "illegal"
fflush(stdout);
_setmode(_fileno(stdout), _O_U16TEXT);
std::wcout << L"\u250f";
works for me with VC++ 10. – TacetWriteConsoleW
. – Tacet