Проблема, яка часто виникає при створенні консольних додатків у Windows – неможливість виведення кириличних символів:
Ця проблема виникає через невідповідність кодувань Windows і консолі Windows, тобто інтерпретаціїї кодів символів в їх графічне представлення. Докладніше про кодування символів – за посиланням.
Вирішити дану проблему можна тільки одним способом – перед тим, як передати текст в консоль, необхідно його перекодувати. Існує кілька способів перетворення кодів знаків з одного стандарту в іншій, опишемо один з них – установка локалі.
Локаль – це набір параметрів: набір символів, мова користувача, країна, часовий пояс та ін. Локаль необхідна для швидкого налаштування користувача інтерфейсу, залежно від географічного положення. В С++ є функція setlocale()
, яка виконує перекодування символів у відповідності з необхідним мовою. Ця функція визначена в заголовному файлі <locale>
.
Функція setlocale()
має два параметри, перший параметр – категорії типу локалі, у нашому випадку LC_TYPE
– набір символів, другий параметр – означає локалі. Таким чином, спочатку встановлюємо потрібну локаль, у нашому випадку – "ukr"
(для російської мови "rus"
), після чого, можна використовувати кирилицю, для виведення повідомлень в консоль:
При використанні цього способу, кирилиця виводиться коректно, окрім української літери “і”. Для коректного відображення всіх українських літер скористаємося іншим способом: підключимо до проекту заголовний файл <Windows.h>
та скористаємося функцією SetConsoleOutputCP()
, яка встановить кодову таблицю Windows-1251 в потік виведення:
Для підтримки української мови в потоку введення використовується функція SetConsoleСP()
з тим же аргументом – 1251.
Є один вагомий недолік у даних функцій – вони працюють зі шрифтом Lucida Console. Тому необхідно налаштувати шрифт консолі:
Приклад використання функцій в коді:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <Windows.h> // підключення заголовного файлу Windows.h using namespace std; int main() { SetConsoleCP(1251); // встановлення кодування Windows-1251 в потік введення SetConsoleOutputCP(1251); // встановлення кодування Windows-1251 в потік виведення int a, b; cout << "Введіть а " << endl; cin >> a; cout << "Введіть b " << endl; cin >> b; cout << " а + b = " << a+b << endl; system("pause"); return 0; } |
Дякую за допомогу!