Функция setlocale в C++ может не работать с кириллическими символами по нескольким причинам:
- Установка некорректного языкового указателя. 1 Например, нельзя указывать «Russia», «Russian», «Russian Federation». 1 Функция производит проверку по названию региона, но не всегда это указано в таблице локализации. 1
- Использование однобайтных кодировок. 1 Для правильного вывода кириллицы рекомендуется использовать Unicode, например, UTF-8. 15 Для Windows это означает переход с узких строк (char, std::string) на широкие (wchar_t, std::wstring) и использование кодировки UTF-16 для строк. 1
- Использование потока ввода. 2 Функция setlocale работает только с потоком вывода, при использовании потока ввода введённый текст передаётся в программу неправильно. 2
Для корректной работы с кириллическими символами в C++ также рекомендуется настроить используемый шрифт в командной строке, выбрав, например, Lucida Console. 2