Изначально файл программы набирался в Notepad++(по умолчанию utf-8). Много разрозненного русского текста. При работе через MINGW64 русский выводился без проблем. При использовании файлов в Visual Studio 2017 вылезли непонятные символы.
#include <Windows.h>
SetConsoleOutputCP(CP_1251);
меняет тип кодировки, но кракозябры не исчезают...
#include <clocale>
setlocale(LC_CTYPE, "rus");
ничего не поменял.
Кусочек кода из программы:
cout << "Укажите количество датчиков для внесения в базу данных, " <<
"либо 0 для выхода.\n";
Как исправить ситуацию, не переписывая русский текст?
Проверьте шрифт в консоли на поддержику кирилицы/UTF8. (ПКМ по окну консоли — шрифты) Так, как ваш код отлично работает на моем ПК.
Как другой вариант попробуйте использувать SetConsoleOutputCP(CP_UTF8)
(код взят из ответа на похожий вопрос):
#include <iostream>
#include <Windows.h>
int main() {
SetConsoleOutputCP(CP_UTF8);
std::cout << u8"Greek: αβγδ\n Привет!\n" << std::flush;
getchar();
return 0;
}
Ваш код неправильно использует setlocale. Для UTF8 должно быть так:
setlocale(LC_ALL, "ru_RU.utf8");
Кроме того, строковые литералы нужно явно объявить как UTF8:
cout << u8"Укажите количество датчиков для внесения в базу данных, ";
При соблюдении этих условий, русский (и только русский) текст в консоль выводится будет (но считываться через cin все равно не будет). Если хотите полноценно работать с Unicode в Visual Studio, перейдите на широкие символы, как описано здесь: Русский язык в консоли
Сборка персонального компьютера от Artline: умный выбор для современных пользователей