如何在不使用_setmode的情况下在C ++中输出unicode

Joe*_*hor 5 c++ unicode cout visual-studio-2013

我试图在控制台输出中插入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)
Run Code Online (Sandbox Code Playgroud)

我尝试过的

我试图做以下所有事情来输出它:

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)
Run Code Online (Sandbox Code Playgroud)
std::cout << "\u250F";
Run Code Online (Sandbox Code Playgroud)
std::wcout << "\u250F";
Run Code Online (Sandbox Code Playgroud)
std::cout << L"\u250F";
Run Code Online (Sandbox Code Playgroud)
std::wcout << L"\u250F";
Run Code Online (Sandbox Code Playgroud)
std::cout << "?";
Run Code Online (Sandbox Code Playgroud)
std::wcout << "?";
Run Code Online (Sandbox Code Playgroud)
std::cout << L"?";
Run Code Online (Sandbox Code Playgroud)

我如何告诉控制台如何输出unicode

std::wcout << L"?";
Run Code Online (Sandbox Code Playgroud)

确实是问题所在。

system("chcp 65001");
Run Code Online (Sandbox Code Playgroud)

没有错误,但是什么也没做

std::locale::global(std::locale("en_US.utf8"));
Run Code Online (Sandbox Code Playgroud)

它会导致参数“非法”的位置出现错误

tru*_*liu 1

以下代码对我有用: \nmy ENV: vs2013, win7_x64, system locale is \'English (United States)\'

\n\n
SetConsoleOutputCP(CP_UTF8);\n_setmode(_fileno(stdout), _O_U8TEXT);\nwprintf(L"Interface %s\\r\\n", pNP->pszwName);   //pszwName is a wchar_t*\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一个技巧是你的控制台字体,你的控制台字体是否包含字符\'\xe2\x94\x8f\'?

\n\n

google \'cmd font fontlink\' 将字体添加到您的 cmd 控制台。

\n\n

在执行程序之前,在 cmd 控制台中运行“chcp 65001”。

\n

  • 同时调用“SetConsoleOutputCP”和“_setmode”会适得其反。 (3认同)