Как преобразовать UTF-8 в Кириллицу в Visual Studio 2017?

136
15 декабря 2019, 02:20

Изначально файл программы набирался в Notepad++(по умолчанию utf-8). Много разрозненного русского текста. При работе через MINGW64 русский выводился без проблем. При использовании файлов в Visual Studio 2017 вылезли непонятные символы.

    #include <Windows.h>
    SetConsoleOutputCP(CP_1251);

меняет тип кодировки, но кракозябры не исчезают...

#include <clocale>
setlocale(LC_CTYPE, "rus");

ничего не поменял.

Кусочек кода из программы:

cout << "Укажите количество датчиков для внесения в базу данных, " <<
"либо 0 для выхода.\n";

Как исправить ситуацию, не переписывая русский текст?

Answer 1

Проверьте шрифт в консоли на поддержику кирилицы/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;
}
Answer 2

Ваш код неправильно использует setlocale. Для UTF8 должно быть так:

setlocale(LC_ALL, "ru_RU.utf8");   

Кроме того, строковые литералы нужно явно объявить как UTF8:

cout << u8"Укажите количество датчиков для внесения в базу данных, ";

При соблюдении этих условий, русский (и только русский) текст в консоль выводится будет (но считываться через cin все равно не будет). Если хотите полноценно работать с Unicode в Visual Studio, перейдите на широкие символы, как описано здесь: Русский язык в консоли

READ ALSO
создать 2 int числа из одного float

создать 2 int числа из одного float

Необходимо создать 2 числа из одного с плавающей точкойfloat 15

155
Изменение цвета кнопки при нажатии и уменьшение размера поля ввода QLineEdit при обрамлении в Qt Creator 4.8.1 C++

Изменение цвета кнопки при нажатии и уменьшение размера поля ввода QLineEdit при обрамлении в Qt Creator 4.8.1 C++

Пытаюсь написать элементарное окно авторизации (в качестве обучения) и столкнулся со следующей проблемойИмеется определенная кнопка в cpp-файле...

173
Почему std::multiset не работает с константами?

Почему std::multiset не работает с константами?

Почему уже при создании множества, вылетает ошибка, хотя не был изменен массив?

137