【发布时间】:2014-11-10 00:19:27
【问题描述】:
我正在尝试在控制台输出中插入一个 unicode 值,在本例中为 \u250F 或 ┏。我四处寻找,人们推荐了各种各样的东西。在讨论我的尝试之前,我使用的是 Windows 和 Visual Studio 2013。
主要错误
当我尝试多个“修复”时,如果未指定,我总是会收到相同的错误:
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)
我的尝试
我已尝试执行以下所有操作来输出它:
std::cout << "\u250F";
std::wcout << "\u250F";
std::cout << L"\u250F";
std::wcout << L"\u250F";
std::cout << "┏";
std::wcout << "┏";
std::cout << L"┏";
std::wcout << L"┏";
我如何尝试告诉控制台如何输出 unicode
_setmode(_fileno(stdout), _O_U16TEXT);
似乎是问题所在,真的。
system("chcp 65001");
不会出错,但不会做任何事情
std::locale::global(std::locale("en_US.utf8"));
它会导致参数“非法”的错误
【问题讨论】:
-
fflush(stdout);_setmode(_fileno(stdout), _O_U16TEXT);std::wcout << L"\u250f";适用于我的 VC++ 10。 -
也可以直接调用Windows API,例如
WriteConsoleW.
标签: c++ unicode visual-studio-2013 cout