#include <iostream>
#include <locale.h>
#include <Windows.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int a;
cout << "Почему";
cin >> a;
}
Как ни крути, в консоли всё еще остается сбитая кодировка, SetConsoleCP тоже пробовал, никакого результата
Использую g++ НО, прошу заметить, что в Visual Studio всё отлично отображается
xxxtested, Исходник написан в UTF8. Кодировка консоли CP866 (по умолчанию) или CP1251. Компилятор сам ничего не перекодирует. Вы то же не перекодируете. Вот и результат.
xxxtested, Потому что MSVS предварительно настраивает консоль, как минимум устанавливает кодировку UTF8.
В обычной консоли вы тоже можете установить нужную кодировку командой: chcp 65001
xxxtested, Можно менять кодировку консоли и из приложения. Но это "дурной тон", т.к. пользователь установив определенную кодировку в консоли, предполагает получить вывод от приложения в установленной кодировке, а не в той, в какой удобно приложению. Поэтому приложение должно подстраиваться под установленную в консоли кодировку и делать вывод предварительно перекодировав свои сообщения.
В учебных проектах это не существенно.
Спасибо большое. Данный кусок кода наконец адекватно вывел кириллицу в консоль. Но вы писали, что данное является дурным тоном, то каким способом это можно заменить. Даже если взять во внимание пк, то как вы и писали, стоит 866.
xxxtested, WinAPI предоставляет функции для перекодирования: MultiByteToWideChar и WideCharToMultiByte.
Можно использовать их.
Так же вроде бы можно задавать перекодирование потоков ввода/вывода с помощью std::ios_base::imbue. Но это не точно и примеров использования у меня нет. Погуглите. Если найдете вменяемое описания с примером опубликуйте тут ссылку, будет интересно ознакомится.
В любом случае, если будете заморачиваться с перекодировкой, то сами исходники лучше писать в UTF8 и в программе использовать широкие символы для хранения строк.