• Как выводить русские буквы в консоль на С++?

    @res2001
    Developer, ex-admin
    Вечная проблема :-)
    Каждый начинающий виндовый С++ программист должен пройти через это!

    1. Виндовая командная строка по умолчанию имеет кодировку cp866 (да-да, не cp1251). Не рекомендую выводить в UTF8, т.к. cmd до сих пор коряво работает с этой кодировкой.
    2. cmd и консоль powershell - это разные консоли
    3. Компилятор и стандартная библиотека (cin/cout) никак не конвертируют кодировки при вводе/выводе.
    (Возможно преобразование можно как-то задать, но по умолчанию это не делается.)
    4. Компилятор никак не преобразует ваши текстовые строки в программе при сборке, т.е. в какой кодировке вы написали строковую константу, та же кодировка будет выведена на консоль. Таким образом - имеет значение в какой кодировке у вас исходники!
    5. Кодировку в консоли можно поменять из самой консоли командой chcp. Часто так и делают. В русской винде 2 широко используемые кодировки консоли: cp866 и cp1251. Не стоит надеяться на то, что программа всегда будет запускаться только при одной кодировке.

    Исходя из вышенаписанного:
    1. Исходники всегда пишем в UTF8
    2. Перед выводом всегда преобразуем UTF8 в кодировку консоли. После ввода - то же самое. Есть соответствующие функции в WinAPI.
    3. Никогда не меняем принудительно кодировку консоли - это не удобно пользователям программы

    Для самого простого варианта - вы можете написать исходники в cp866 и по умолчанию в cmd у вас все будет нормально с кодировками.

    Удачи!
    Ответ написан
    Комментировать