Русский текст в консоли Windows C++

Проблема состоит в том, что в Windows в консоли кодировка CP866, а кодировка файлов либо CP1251 либо UTF-8.

У меня кодировка файлов UTF-8 и изначально работал ввод русского текста а вот вывод был кракозябрами. Вывод мне удалось починить, а ввод - поломать. Тем не менее прилагается несколько способов лечения кодировок ввода-вывода.


#include <iostream>  // std::cout
#include <windows.h> // SetConsoleOutputCP()
using namespace std;
int main(){
    SetConsoleCP(CP_UTF8);       // Кодировка на ввод (866, 65001, 1251 не помогает, установка Lucida console тоже)
    SetConsoleOutputCP(CP_UTF8); // Кодировка на вывод (можно 65001 или CP_UTF8)
    cout << "Привет \n";         //Привет
    string str; 
    cin >> str;  // мир
    cout << str; // (выводятся пробелы, с английскими словами нормально работает)
}

#include <iostream>  // std::cout
#include <cstdlib>   // system()
using namespace std;
int main(){
    system("chcp 65001");   // Active code page: 65001 (Устанавливает UTF-8)
    system("cls");          // Очищает окно от предыдущего вывода
    cout << "Привет \n";    //Привет
    string str;
    cin >> str;  // мир
    cout << str; // (выводятся пробелы, с английскими словами нормально работает)
}

Данный способ работает даже при выводе QT в окне "Вывод приложения", но потребуется заменять cout на wcout и перед строкой вписывать литеру L.


#include <iostream>             // wcout, endl
using namespace std;            // Чтобы не писать std::
int main(){
    setlocale(LC_ALL, "");      // Устанавливает русскую кодировку
    wcout << L"Привет" << endl; //Привет
}
2023-10-23



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Русский текст в консоли Windows C++
cout вывод в консоль С++