|
|
|
| Уже не раз и не два возникали темы, как выводить русский язык в консольных программах. Особенно, это актуально в отношении UNICODE-программ. Уж больно заманчиво использовать только UNICODE-вызовы и UNICODE-проекты, не переключаясь в однобайтовую кодировку ради русского языка, тем более, что UNICODE его прекрасно поддерживает.
Представляю вашем вниманию еще один способ (для Visual Studio C++, где все это актуально), который правда потребует более глубокого погружения в Windows API, в котором есть функция WriteConsole(), позволяющая выводить русский текст в UNICODE. Придется конечно, сначала получить дескриптор консоли и корректно подсчитать количество символов (напоминаю, что sizeof ту уже не обойтись), но можно получить сразу русский текст, без переключения кодировки консоли и проекта в однобайтовый режим (что изрядно утомляет, да и вообще сколько можно).
#include <Windows.h>
#include <iostream>
#define ElementCount(x) (sizeof(x)/sizeof(x[0]))
using namespace std;
int main()
{
int i;
HANDLE hStdOut;
DWORD dwWritten;
wchar_t str[] = L"Выводим фразу на русском языке\r\n";
// Получаем дескриптор консоли
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdOut == INVALID_HANDLE_VALUE)
{
MessageBox(
NULL,
L"Ошибка получения дескриптора консоли",
L"Ошибка консольного вывода",
MB_OK | MB_ICONINFORMATION);
return GetLastError();
}
// Выводим строку str
// Количество символов в строке за минусом \0
if(!WriteConsole(
hStdOut,
&str,
ElementCount(str) - 1,
&dwWritten,
NULL))
{
MessageBox(
NULL,
L"Ошибка консольного вывод на русском языке",
L"Ошибка консольного вывода",
MB_OK | MB_ICONINFORMATION);
return GetLastError();
}
system("pause");
return 0;
} |
| |
|
|