Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (09.01.2012 в 01:34)
Уже не раз и не два возникали темы, как выводить русский язык в консольных программах. Особенно, это актуально в отношении 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;
}


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: