Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unicode不打印 我有以下C++代码< /P> char* locale = setlocale(LC_ALL, "German"); // Get the CRT's current locale. std::locale lollocale(locale); setlocale(LC_ALL, locale); // Restore the CRT. wcout.imbue(lollocale); // Now set the std::wcout to have the locale that we got from the CRT. COORD cur = { 0, 0 }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cur); wcout << L"Enemy " << this->enemyStrengthLeft << L"/" << this->enemyStrength << endl; wcout << L"◄"; for (int i = 0; i < 20; i++) { if (i % 2 == 0) wcout << L"■"; else wcout << L" "; } wcout << L"►" << endl; char*locale=setlocale(德语)获取CRT的当前区域设置。 std::locale lollage(locale); setlocale(LC_ALL,locale);//恢复CRT。 wcout.imbue(lollocale);//现在将std::wcout设置为我们从CRT获得的区域设置。 坐标cur={0,0}; 设置控制台或位置(GetStdHandle(标准输出句柄),cur); wcout_C++_Winapi_Unicode - Fatal编程技术网

Unicode不打印 我有以下C++代码< /P> char* locale = setlocale(LC_ALL, "German"); // Get the CRT's current locale. std::locale lollocale(locale); setlocale(LC_ALL, locale); // Restore the CRT. wcout.imbue(lollocale); // Now set the std::wcout to have the locale that we got from the CRT. COORD cur = { 0, 0 }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cur); wcout << L"Enemy " << this->enemyStrengthLeft << L"/" << this->enemyStrength << endl; wcout << L"◄"; for (int i = 0; i < 20; i++) { if (i % 2 == 0) wcout << L"■"; else wcout << L" "; } wcout << L"►" << endl; char*locale=setlocale(德语)获取CRT的当前区域设置。 std::locale lollage(locale); setlocale(LC_ALL,locale);//恢复CRT。 wcout.imbue(lollocale);//现在将std::wcout设置为我们从CRT获得的区域设置。 坐标cur={0,0}; 设置控制台或位置(GetStdHandle(标准输出句柄),cur); wcout

Unicode不打印 我有以下C++代码< /P> char* locale = setlocale(LC_ALL, "German"); // Get the CRT's current locale. std::locale lollocale(locale); setlocale(LC_ALL, locale); // Restore the CRT. wcout.imbue(lollocale); // Now set the std::wcout to have the locale that we got from the CRT. COORD cur = { 0, 0 }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cur); wcout << L"Enemy " << this->enemyStrengthLeft << L"/" << this->enemyStrength << endl; wcout << L"◄"; for (int i = 0; i < 20; i++) { if (i % 2 == 0) wcout << L"■"; else wcout << L" "; } wcout << L"►" << endl; char*locale=setlocale(德语)获取CRT的当前区域设置。 std::locale lollage(locale); setlocale(LC_ALL,locale);//恢复CRT。 wcout.imbue(lollocale);//现在将std::wcout设置为我们从CRT获得的区域设置。 坐标cur={0,0}; 设置控制台或位置(GetStdHandle(标准输出句柄),cur); wcout,c++,winapi,unicode,C++,Winapi,Unicode,Windows不支持通过标准库使用Unicode。可以通过标准库将任意Unicode打印到控制台,但这不是很方便,而且我所知道的所有方法都有令人不快的副作用 只需使用Windows API: std::wstring s = L"◄ ■ ►"; WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), s.c_str(), s.size(), nullptr, nullptr); 另一方面,获取区域设置并恢复它的代码并没有按照您的想法进行,还有更好的方法

Windows不支持通过标准库使用Unicode。可以通过标准库将任意Unicode打印到控制台,但这不是很方便,而且我所知道的所有方法都有令人不快的副作用

只需使用Windows API:

std::wstring s = L"◄ ■ ►";
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), s.c_str(), s.size(), nullptr, nullptr);

另一方面,获取区域设置并恢复它的代码并没有按照您的想法进行,还有更好的方法

char* locale = setlocale(LC_ALL, "German"); // Get the CRT's current locale.
std::locale lollocale(locale);
setlocale(LC_ALL, locale); // Restore the CRT.
setlocale
返回函数运行后生效的区域设置名称。因此,您总是会得到一个德国语言环境的名称,而全局语言环境将不会恢复为其原始值。如果确实要获取当前设置的区域设置,则可以通过传递
nullptr
而不是区域设置名称来实现:

char const *locale = std::setlocale(LC_ALL, nullptr);
这将获取当前区域设置而不更改它

但是,您应该知道,除非在某个点更改区域设置,否则它将是“C”区域设置。C和C++程序总是在这个区域启动。“C”语言环境不一定允许您使用基本源字符集之外的字符(甚至不包括所有ASCII,更不用说像“ä”、“ö”、“ü”、“ß”这样的字符了)◄', '■', 而且►'.

如果要获取用户计算机配置为使用的区域设置,则可以使用空字符串作为名称。还可以向流注入此区域设置,而无需使用全局区域设置

cout.imbue(std::locale("")); // just imbue a stream

char const *locale = std::setlocale(LC_ALL, ""); // set global locale to user's preferred locale, and get the name of that locale.

您的控制台窗口是否使用TrueType字体?哦,对了,我将使用字体。这看起来像Windows,在这种情况下,它需要设置模式(\u fileno(stdout),\u O WTEXT);然后才能将宽字符串发送到标准输出。字符以何种方式不显示?它们是否被遗漏、替换,或者整个输出流是否在第一个unicode字符后“停止”;@Cubbi是的,这是Windows,但我需要哪个头文件来完成您的“把戏”?有效,但我有点好奇为什么它有效,但我的解决方案无效。我的解决方案只适用于德语ä、ö、ü和ß…因为这些字符是与您的区域设置相关的字符集的成员,并且它们在该编码中的表示形式恰好与当前控制台输出代码页中的表示形式相同。(区域设置编码为cp1252,控制台代码页为cp850。)非常感谢:)我使用了您的解决方案:)请参阅您需要在CRT中启用unicode支持:
\u setmode(\u fileno(stdout),\u O\u U16TEXT)@JochenKalmbach是的,这是一种选择。缺点是您必须消除所有基于字符的输出,因为启用该模式后,
printf
cout
等将崩溃。