Как настроить Visual Studio 2022 на нужную кодировку для вывода русского текста в консоли?
Начал изучать C++. При запуске консольного проекта с русским текстом, вместо собственно текста выводятся кракозябры. Понимаю что не совпадают кодировки. Как перенастроить Visual Studio или консоль чтобы из любых проектов текст нормально выводился? Сразу говорю гуглил. И проблемы это не решило, предлагают обычно или прямо в коде программы кодировку менять, либо предлагают настройки, которых нет в моей версии студии.
Почитайте для начала тут.
Я там написал длинный пост на эту тему.
В самой студии изменить кодировку файла исходного кода можно с помощью Save as и там в диалоге жмякнуть на Save->Save with Encoding и выбрать нужную кодировку. Но так придется делать для каждого файла отдельно.
Для UTF-8 лучше выбирать вариант с BOM (микрософт это называет "with signature"), чтоб студия по собственному желанию не меняла кодировку.
res2001, Прочитал, но мне это ни о чем не говорит. Мне нужно чтобы по умолчанию кодировки работали как надо. Можно ли как-то настроить VS чтобы сразу код писался/сохранялся в UTF-8? Без сохранений каждого файла отдельно и без вписываний в код функции SetConsoleOutputCP каждый раз. Чтобы просто написал что нужно, запустил и работает. А то я уже весь день убил не на обучение, а на решение проблемы которая от меня не зависит.
Дамир Валиахметов, В MSVS, на сколько я знаю, нет настроек кодировки файлов по умолчанию.
С/С++ стандарты разрабатывались с ориентировкой на POSIX совместимые ОС. Винда не POSIX совместима, отсюда вылезают разнообразные не стыковки. В винде кодировку консоли можно менять динамически и по умолчанию там используется 866 кодировка. В POSIX ОС используется одна кодировка консоли.
Если вам в лом вникать, то можете просто писать исходники в 866 кодировке, тогда в консоли "по умолчанию" кирилица у вас будет выводиться. Но стоит в консоли сменить кодировку, то получите кракозябры.
По ссылке в прошлом комментарии я приводил пример, как делать более-менее универсальный вариант, чтоб не зависеть от текущей кодировки консоли.
Переходите на Линукс, там этой проблемы нет.
Еще один вариант - не используйте крилицу в ваших программах.
res2001, На Линуксе нет Visual Studio. Да и в целом не вариант, как и работать без кириллицы. Это бред конечно, при обучении в каждом проекте придется отдельно локали переключать. Ну либо возвращаться обратно на шарп, там такой проблемы нет.
По ссылке в первом комментарии есть пример как это можно делать.
Если кратко, то суть такая:
1. все строковые литералы в исходниках пишем с префиксом L: L"Привет мир!", сохраняем в wchar_t/wstring, для работы со строками используем функции для широких строк (с префиксом w/wcs) или методы wstring.
2. При старте программы узнаем кодировку вывода консоли и сохраняем для дальнейшего использования. При выводе строк в консоль предварительно строку конвертируем в текущую кодировку консоли. Все это в примере по ссылке есть.
3. Для ввода из stdin нужно установить его режим с помощью _setmode. При установке режима _O_U16TEXT весь ввод будет автоматически конвертироваться в wchar_t.
По той ссылке автор вопроса сам дал ответ. Его вариант проще и он в большинстве простых случаев будет работать. Можете его использовать - там перекодирование происходит автоматически при выводе и вводе. Но так же везде требуется использовать wchar_t.
Но часто в "нормальных" консольных утилитах надо получать выхлоп от утилиты в кодировке консоли, а не в той кодировке, в которой программа захочет его выдать. Для примера можно посмотреть на любую стандартную консольную утилиту виндов, например dir и т.п. - они работают правильно не зависимо от кодировки консоли и выдают информацию в установленной в консоли кодировке (кодировку вывода можно определить перенаправив вывод в файл). Правда даже стандартные утилиты не все это делают корректно, сходу пример не приведу, но точно встречал такие.