Из за чего в консоли вместо русского языка выводятся вопросительные знаки?

Привет, почему при выводе в консоль русского текста показываются вопросительные знаки??
setlocale(LC_ALL, "rus") прописал, но всё равно вместо русских символов знаки вопроса.
Может ли проблема заключаться в том, что у меня 10 windows стоит на английском?
#include <iostream>
using namespace std;

int main() 
{

	setlocale(LC_ALL, "rus");
	cout << "Отчего работать дяди\n" << "Стали лучше по утру ?\n" << "Просто им администратор\n" << "Просто им администратор\n" << "Отключил vkontakte.ru!\n";
	system("pause");
	return 0;
 }
  • Вопрос задан
  • 2672 просмотра
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Это практически первый вопрос, которым задаются юниоры С++, когда пытаются запустить свою первую консольную программу под виндой.
Ответов на него тут уже была целая пачка.

Суть в том, что в виндовой консоли может быть 2 русские кодировки (cp866 и cp1251) (не уверен, но может быть консоль винды научилась уже нормально работать с UTF8, если научилась, то считайте, что добавилась еще одна кодировка). Причем по умолчанию используется cp866. Кодировку консоли можно менять из самой консоли или программно.
При выводе текста в консоль никаких преобразований кодировок не происходит. В какой кодировке у вас написаны исходники - та и выводится. И если кодировка консоли и кодировка исходников не совпадают, то будет не читабельный текст.

Самый оптимальный и самый сложный вариант - в программе узнать кодировку консоли и перед выводом конвертировать текст в эту кодировку. Так же обратную операцию производить при вводе. В этом случае исходники программы лучше всего писать в UTF8 и использовать wchar_t.

Самый простой, дебильный и не всегда работающий (не будет работать если изменена кодировка консоли) - писать исходники в cp866.
Немного чуть более сложный, но не правильный - поменять кодировку консоли из программы на ту в которой написаны исходники.

Самый надежный вариант - не используйте русский в консольных программах - только английский. Сомневаюсь, что вам придется когда-то писать профессиональные консольные утилиты, которые бы умели адаптироваться к разным кодировкам, так что, возможно, нет смысла углубляться в эту тему. В GUI приложениях этой проблемы нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы