Если программа при выводе на консоль использует кириллицу, то мы можем столкнуться с ситуацией, когда вместо кириллических символов будут отображаются непонятные знаки. Особенно это актуально для ОС 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 просто не окажет никакого влияния.