Проблема: Во время работы программы неверно отображаются русские фразы в коде.
#include
#include
using namespace std;
int main()
{
string a;
cout << "Как Вас зовут?\n" ;
cin >> a;
cout << "Привет, ";
cout << a << "!\n";
system("pause");
return 0;
}
Причина: Изначально в редакторе кода Visual Studio (как и в других компиляторах и редакторах, работающих вOS Windows) установлена кодировка Кирилица Windows 1251,
а в консольном окне (в командной строке) используется кодировка UTF-8.
Решение № 1: Чтобы согласовать кодировки, необходимо сохранять файлы не в Windows 1251, а в DOS 866 Для этого в Visual Studio 2008 в меню ФАЙЛ - Дополнительные параметры сохранения… вместо Кирилица (Windows) – кодовая страница 1251 выбрать Кирилица (DOS) – кодовая страница 866
Недостатки:
• Не все компиляторы позволяют сохранить файл в другой кодировке.
• Нельзя включить украинскую раскладку
• При закрытии решения и повторном открытии кода в редакторе Visual Studio – происходят искажения кода из-за несоответствия кодировок.
Решение № 2: В нужном месте необходимо включать нужную кодировку отдельно для кода на русском языке и отдельно для вводимых с пользователем знаков.
#include
#include
using namespace std;
int main() {
string a;
setlocale(LC_ALL,"Russian"); /* а лучше setlocale(0,""); для установки кода географической страны ((0,"")- текущие настройки операционной системы) */
cout << "Как Вас зовут?\n" ;
cin >> a;
cout << "Привет, ";
setlocale(LC_ALL, ".OCP"); // или setlocale(0, ".OCP"); для возврата к начальным настройкам
cout << a<< "!" << endl ;
system("pause");
return 0;
}
Недостаток: Нет смысла пользоваться этим способом, если программа диалоговая, т.е. перемежевывается ввод с консоли и вывод из кода русского текста. В таком случае лучше Решение № 3
Решение № 3 Вначале включаем нужные кодировки для потока ввода и вывода с консоли.(но перед этим устанавливаем в консольном окне шрифт luchida cjnsole)
#include
#include
#include <windows.h>
using namespace std;
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string a;
cout << "Как Вас зовут?\n" ;
cin >> a;
cout << "Привет, ";
cout << a <<<"!\n"
system("pause");
return 0;
}
ПРИМЕЧАНИЕ: Нельзя одновременно применять несколько способов, поскольку отображение русского текста будет снова искажено.
Воспользовался вторым способом (третий не сработал - получилась ошибка) - получилось.
Источник: http://lvvas.co.cc/index.php?option=com_content&view=article&id=115&Itemid=101