1
#include <iostream>
using namespace std;
int main()
{
   setlocale(LC_CTYPE,"Russian");
   cout << "Этот текст будет каракулями";
   return 0;
}

Немогу понять, как сделать, чтобы была поддержка OEM.

Abyx
  • 31,143
johnfelix
  • 119

4 Answers4

2
#include <iostream>
#include <windows.h>
using namespace std;

char* convert(char* str)
{
   char* s;
   CharToOemA(str, s); // Функция и конвертация.
   return s;
}

int main()
{
   cout<<convert("Привет Мир!!!");
   cin.get();

   return 0;
}
tukan
  • 676
  • 1
  • 10
  • 30
  • Эм.. В функцию передаётся неинициализированный указатель, который потом возвращается. Судя по msdn, передаётся по значению. Как это вообще может работать? А если по ссылке и функция сама выделяет память, то кто-то её должен освобождать. – Qwertiy Jan 19 '16 at 18:10
1

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

Anton Mukhin
  • 5,535
  • 9
  • 53
  • 92
  • в учебниках сказана что это поле setlocale(LC_CTYPE,"Russian") является изменением кодировки на OEM866 – johnfelix May 31 '11 at 05:34
0

Нормально отработало на Mac OS X и на Debian GNU/Linux... В винде помню ставил просто setlocale(0,""); и все работало хорошо.

AlexDenisov
  • 6,442
  • 1
  • 21
  • 29
  • unix это и не нужно, а вот в win не проходит, может в Embarcadero RAD SDtudio – johnfelix May 31 '11 at 06:02
  • а вариант сменить кодировку консоли? предложенные решения, на мой взгляд, это просто костыли привязанные к системе. – AlexDenisov May 31 '11 at 16:29
-1

Если ты пишешь в Visual Studio, то есть такой способ

#include "stdafx.h"
#include <iostream>

using namespace std;

int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251);

   cout &lt;&lt; "Этот текст будет нормальным, если после компиляции и запуска ты в        свойствах консоли поменяешь шрифт на Lucida Console";

    return 0;

}