Форум: Форум C++Разное
Новые темы: 00
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Русский язык в UNICODE в консоли Visual Studio С++
 
 автор: 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;
}

  Ответить  
 
 автор: cheops   (09.01.2012 в 01:35)   письмо автору
 
   для: cheops   (09.01.2012 в 01:34)
 

На всякий случай привожу старую тему по выводу русского языка, кому приведенный выше способ кажется несколько экстравагантным.

http://softtime.ru/cpp/read.php?id_forum=1&id_theme=10

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования