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

Последнее обновление: 01.04.2023

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

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

#include <iostream>
 
int main()
{
    std::cout << "Привет мир!" << std::endl;
}

Компиляция и запуск в ОС Windows может выглядеть следующим образом:

c:\cpp>g++ -std=c++20 -Wall -pedantic app.cpp -o app & app
Р?С?РёР?РчС' Р?РёС?!

c:\cpp>

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

#include <iostream>
 
int main()
{
	setlocale(LC_ALL, "");
    std::wcout << L"Привет мир!" << std::endl;
}

Теперь для вывода данных на консоль вместо объекта std::cout применяется объект std::wcout, который предназначен для работы с символами Unicode. В данном случае предполагается, что кодировка самого файла - UTF-8. Кроме того, перед строкой указан символ L.

Повторно компилируем и запустим приложение:

c:\cpp>g++ -std=c++20 -Wall -pedantic app.cpp -o app & app
Привет мир!

c:\cpp>

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850