Форум программистов, компьютерный форум, киберфорум
fair7
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Как использовать кириллицу в консольных приложениях?

Запись от fair7 размещена 19.01.2021 в 23:59
Показов 7943 Комментарии 11

Как использовать кириллицу в консольных приложениях (русский и украинский)?

Есть несколько способов.
1) В настройках шрифта выбрать Lucida Console
Нажмите на изображение для увеличения
Название: KUPU77UYA.PNG
Просмотров: 814
Размер:	3.8 Кб
ID:	6713
(Либо через настройки консоли либо задаванием номер шрифта).
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
}

2) через функцию system
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
 
int main()
{
    char rus[]="Корректное отображение букв: Є Ї Ё";
    char echo[]="                                                  ";
    wsprintf(echo,"echo %s",rus);
    system(echo);
    return 0;
}

3) или написать свою библиотеку:cyrillic.rar
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#pragma once
void cyrillic(unsigned char *txt)
{
    for (int i=0; txt[i] ; ++i)
    {
        if (0<txt[i]&&txt[i]>0xEF)         txt[i]=240+txt[i];
        else  if (0xF0>txt[i]&&txt[i]>0xBF)txt[i]=192+txt[i];
        else
        {
            switch(txt[i])
            {
                case 0xA5:txt[i]=0xD5;break;// f
                case 0xB4:txt[i]=0xD6;break;// r
                case 0xA8:txt[i]=240;break;// Ё
                case 0xAA:txt[i]=242;break;// Є
                case 0xAF:txt[i]=244;break;// Ї
                case 0xB2:txt[i]='I';break;// I
                case 0xB3:txt[i]='i';break;// i
                case 0xB6:txt[i]=0x14;break;//n
                case 0xB8:txt[i]=241;break;// ё
                case 0xB9:txt[i]=252;break;// №
                case 0xBA:txt[i]=243;break;// є
                case 0xBF:txt[i]=245;break;// ї
            }
        }
    }
}
void cyrillic(char *txt){ cyrillic((unsigned char *)txt);}

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <windows.h>
#include <conio.h>
#define endl _cprintf("\n")
#define PP _cprintf
#define gg getch()
#include "cyrillic.h"
 
int main()
{
    unsigned char rus[]="Корректное отображение русских букв.\n";
    char ukr[]="А також правильне відображення українських літер є.";
    cyrillic(rus),PP((char*)rus),endl;
    cyrillic(ukr),PP(ukr),endl;
    gg;
    return 0;
}

Ведь использование CharToOem не позволяет использовать украинские буквы.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 11
Комментарии
  1. Старый комментарий
    Все работает по умолчанию без каких-то настроек.
    Запись от locm размещена 21.01.2021 в 13:40 locm вне форума
  2. Старый комментарий
    Аватар для fair7
    Можно код программы,
    и какая среда компиляции (какая операционка и компилятор какой)?
    Запись от fair7 размещена 21.01.2021 в 23:12 fair7 вне форума
  3. Старый комментарий
    Предполагаю что IDE Visual C++. А точно нужно ставить кодировку 1251? Вроде консоль для кириллицы использует 866. В настройках IDE выбери формат файла в требуемой кодировке и будет тебе счастье. Или как вариант перед каждым выводом указываем SetConsoleOutputCP(1251), а перед каждым вводом SetConsoleCP(1251). Если указать последовательно, что последнее указано, то и будет работать корректно
    Запись от AgentSmith размещена 22.01.2021 в 00:51 AgentSmith вне форума
  4. Старый комментарий
    Аватар для Avazart
    AgentSmith ерунда.
    Запись от Avazart размещена 22.01.2021 в 13:47 Avazart вне форума
  5. Старый комментарий
    Можно код программы
    Весь код на скрине.

    и какая среда компиляции (какая операционка и компилятор какой)?
    Компиль PureBasic. Собирал под винду.
    Библиотечная функция PrintN приводит к вызову WriteConsoleW и вероятно дело в этом.
    Запись от locm размещена 22.01.2021 в 17:40 locm вне форума
  6. Старый комментарий
    Аватар для Avazart
    Начнем с того что есть:
    1. Кодировка файлов исходников ( *.cpp , *.h ) программы.
    2. Есть кодировка самой консоли.

    Очевидно что если исходники в cp1251 (русскоязычная винда) или в UTF8 а консоль в cp866 (по умолчанию как наследие досовских времен) то в выводе будут непонятные кракозяблы.

    Поэтому нужно менять кодировку самой консоли.

    По хорошему конечно хранить исходник в UTF-8 (при чем для MSVC обязательно "UTF-8 c BOM")
    Но стоит отметить что если с cp1251 все просто и нормально работает, то с UTF8 - проблемы в винде.
    Запись от Avazart размещена 22.01.2021 в 21:29 Avazart вне форума
  7. Старый комментарий
    Кодировка исходника UTF-8. Кодировка строк приложения - UCS2. Как видим на скрине - все работает без каких-либо настроек.
    Запись от locm размещена 23.01.2021 в 14:31 locm вне форума
  8. Старый комментарий
    Аватар для Avazart
    Кодировка исходника UTF-8. Кодировка строк приложения - UCS2.
    Чего?

    Если в С++ использовать WriteConsole() то все тоже будет нормально отображаться без настроек.
    Запись от Avazart размещена 23.01.2021 в 14:38 Avazart вне форума
  9. Старый комментарий
    Тогда почему не используете?
    Запись от locm размещена 23.01.2021 в 15:42 locm вне форума
  10. Старый комментарий
    Аватар для K_ILYA_V
    объективная картина мира сложилась таким образом что мир "бытового" программирования простроен на английском языке. его надо учить, кириллица в консоли это попытка остаться в зоне комфорта. это тупик и стагнация.
    Запись от K_ILYA_V размещена 23.01.2021 в 17:59 K_ILYA_V вне форума
  11. Старый комментарий
    Аватар для Avazart
    Когда нужно используем.
    Но std::cout удобнее т.е. он функциональнее ну и на всех платформах.

    Но вопрос почему std::cout/std::cin не работает корректно под виндой остается. (наверное скорее к MS чем к С++)


    Объективная картина мира сложилась таким образом что мир "бытового" программирования простроен на английском языке. его надо учить, кириллица в консоли это попытка остаться в зоне комфорта. это тупик и стагнация.
    Одно дело само программирование, другое дело интерфейс пользователя. Программами пользуются не только программисты.
    Есть такая вещь как локализация и интернационализация.

    https://www.alba-translating.r... ation.html
    Запись от Avazart размещена 23.01.2021 в 20:23 Avazart вне форума
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru