winapi — выводит символы юникода π и ≈ в консольном приложении win32 c ++

Я довольно новичок в программировании, но, похоже, π(pi) Символ не входит в стандартный набор выходов, которые ASCII ручки.

Мне интересно, есть ли способ получить консоль для вывода π символ, чтобы выразить точные ответы относительно определенных математических формул.

6

Решение

Я не совсем уверен, какие-либо другие методы (например, те, которые используют STL), но вы можете сделать это с Win32, используя WriteConsoleW:

HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
LPCWSTR lpPiString = L"\u03C0";

DWORD dwNumberOfCharsWritten;
WriteConsoleW(hConsoleOutput, lpPiString, 1, &dwNumberOfCharsWritten, NULL);
3

Другие решения

Microsoft CRT не очень разбирается в Unicode, поэтому может быть необходимо обойти его и использовать WriteConsole() непосредственно. Я предполагаю, что вы уже скомпилировали для Unicode, иначе вам нужно явно использовать WriteConsoleW()

1

Я нахожусь в стадии изучения этого, так что поправьте меня, если я что-то не так.

Кажется, что это трехступенчатый процесс:

  1. Используйте широкие версии cout, cin, string и так далее. Итак: wcout, wcin, wstring
  2. Перед использованием потока установите его в режим Unicode-friendly.
  3. Настройте целевую консоль для использования шрифта с поддержкой Юникода.

Теперь вы должны быть в состоянии потрясти этих фанк-хаосов.

Пример:

#include <iostream>
#include <string>
#include <io.h>

// We only need one mode definition in this example, but it and several other
// reside in the header file fcntl.h.

#define _O_WTEXT        0x10000 /* file mode is UTF16 (translated) */
// Possibly useful if we want UTF-8
//#define _O_U8TEXT       0x40000 /* file mode is UTF8  no BOM (translated) */

void main(void)
{
// To be able to write UFT-16 to stdout.
_setmode(_fileno(stdout), _O_WTEXT);
// To be able to read UTF-16 from stdin.
_setmode(_fileno(stdin), _O_WTEXT);

wchar_t* hallå = L"Hallå, värld!";

std::wcout << hallå << std::endl;

// It's all Greek to me. Go UU!
std::wstring etabetapi = L"η β π";

std::wcout << etabetapi << std::endl;

std::wstring myInput;

std::wcin >> myInput;

std:: wcout << myInput << L" has " << myInput.length() << L" characters." << std::endl;

// This character won't show using Consolas or Lucida Console
std::wcout << L"♔" << std::endl;
}
1
По вопросам рекламы [email protected]