Найти в Дзене
Квантовый мопс

Возможные решения проблемы отображения кириллицы в консоли С++

Проблемы, связанные с отображением символов русского алфавита в консоли возникают наверное у каждого, кто начинает изучать программирование на C++, а понять как её решить бывает довольно тяжело.

Эта проблема возникает из-за разницы в кодировках между Windows и консолью. В то время как система использует кодировку cp1251, консоль продолжает пользоваться старой кодировкой cp866, унаследованной от MS-DOS.

Не слишком приятно видеть такое вместо вывода программы
Не слишком приятно видеть такое вместо вывода программы

Одним из распространённых вариантов решения проблемы является смена шрифта консоли со стандартного Consolas на Lucida Console, однако помогает это не всегда.

Шрифт меняется в свойствах консоли, в разделе Шрифт. Попасть туда можно через контекстное меню в самом окне консоли.

Меняем шрифт в консоли
Меняем шрифт в консоли

Если первый способ не помог, то можно провести простые манипуляции с кодом разрабатываемой программы.

Проблемы вывода текста на экран решаются установкой соответствующей локали для консоли.

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

Для того, чтобы консоль начала корректно отображать символы русского алфавита, необходимо в начале программы написать команду setlocale(LC_CTYPE, "rus");

Использование setlocale для исправления вывода
Использование setlocale для исправления вывода

Это решает проблему лишь отчасти, так как не затрагивает то, что пользователь вводит с клавиатуры. В результате, консоль выводит только то, что было прописано в программе заранее, но не введённую вручную строку.

Обидно(
Обидно(

Для полного решения проблемы следует добавить ещё 2 команды, которые позволят вручную установить нужную кодировку для потоков ввода и вывода:

  • Для потока ввода это SetConsoleCP(1251);
  • Для потока вывода это SetConsoleOutputCP(1251);

Для использования этих команд, необходимо подключить дополнительный заголовочный файла Windows.h, при помощи директивы #include <windows.h>

Задача успешно решена)
Задача успешно решена)

Таким образом можно легко решить одну из самых распространённых проблем, встречающихся при освоении языка программирования C++. Если вы знаете какие-либо ещё способы, напишите пожалуйста о них в комментариях).