@templier224

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

Здравствуйте, возникла проблема при выводе русских букв в консоль
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
setlocale(0, "");
прописал utf-8,в настройках командной строки,в свойстах конфигурации-набор символов проверял как многобайтовую кодировку также набор символов юникода.
Все это проверено , тоже почему то не работает
5f4fe9cfad024076777114.png
5f4fe9d9b7314528134995.png
5f4febaaa0fed518717786.png
5f4febb52d7eb860938830.png

Помогите решить проблему.
Зарание Спасибо
  • Вопрос задан
  • 6259 просмотров
Пригласить эксперта
Ответы на вопрос 2
@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 у вас все будет нормально с кодировками.

Удачи!
Ответ написан
Комментировать
Adamos
@Adamos
Не пользовался поздними ВижуалСтудиями, но до 2010 включительно майкрософтовский компилятор в упор не вдуплял UTF без BOM. Не исключаю, что эта архиважная проблема так и не преодолена.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы