Локализация и кириллица в консоли


Если программа при выводе на консоль использует кириллицу, то мы можем столкнуться с ситуацией, когда вместо кириллических символов будут отображаются непонятные знаки. Особенно это актуально для ОС Windows. И в этом случае необходимо явным образом задать текущую локаль (культуру) для вывода символов. В языке C++ это можно сделать с помощью встроенной функции setlocale().

Итак, изменим код, который использовался в прошлых темах следующим образом:

1
2
3
4
5
6
7
#include <iostream>

int main()
{
std::cout << "Привет мир!";
return 0;
}
Компиляция и запуск в ОС Windows может выглядеть следующим образом:

Русский язык в C++ в консоли
Вместо ожидаемого текста я получаю какие-то непонятные символы. Теперь изменим код, применив функцию setlocale:

1
2
3
4
5
6
7
8
#include <iostream>

int main()
{
setlocale(LC_ALL, "");
std::cout << "Привет мир!";
return 0;
}
Повторно компилируем и запустим приложение:

Кириллица в консоли в C++
Стоит отметить, что в качестве кодировки текстового файла в этом случае должна использоваться кодировка ANSI или Windows-1251, но не UTF-8.

На некоторых платформах, например, Ubuntu, мы можем не столкнуться с подобной проблемой. И в этом случае вызов функции setlocale просто не окажет никакого влияния.