Українська мова в консолі

Проблема, яка часто виникає при створенні консольних додатків у Windows – неможливість виведення кириличних символів:

Ця проблема виникає через невідповідність кодувань Windows і консолі Windows, тобто інтерпретаціїї кодів символів в їх графічне представлення.  Докладніше про кодування символів – за посиланням.

Вирішити дану проблему можна тільки одним способом – перед тим, як передати текст в консоль, необхідно його перекодувати. Існує кілька способів перетворення кодів знаків з одного стандарту в іншій, опишемо один з них – установка локалі.

Локаль – це набір параметрів: набір символів, мова користувача, країна, часовий пояс та ін. Локаль необхідна для швидкого налаштування користувача інтерфейсу, залежно від географічного положення. В С++ є функція setlocale(), яка виконує перекодування символів у відповідності з необхідним мовою. Ця функція визначена в заголовному файлі <locale>.

Функція setlocale() має два параметри, перший параметр – категорії типу локалі, у нашому випадку LC_TYPE – набір символів, другий параметр – означає локалі. Таким чином, спочатку встановлюємо потрібну локаль, у нашому випадку – "ukr" (для російської мови "rus"), після чого, можна використовувати кирилицю, для виведення повідомлень в консоль:

При використанні цього способу, кирилиця виводиться коректно, окрім української літери “і”.  Для коректного відображення всіх українських літер скористаємося іншим способом: підключимо до проекту заголовний файл  <Windows.h> та скористаємося функцією SetConsoleOutputCP(), яка встановить кодову таблицю Windows-1251 в потік виведення:

Для підтримки української мови в потоку введення використовується функція SetConsoleСP() з тим же аргументом – 1251.

Є один вагомий недолік у даних функцій – вони працюють зі шрифтом Lucida Console.  Тому  необхідно налаштувати  шрифт консолі:

 

Приклад використання функцій в коді:

 

33+

1 thought on “Українська мова в консолі

Залишити відповідь до Максим Кунцьо Скасувати відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *