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