1

Тема: Українська в консолі!

Пишу курсовий проєкт, зчитую дані з файлів(.txt, .bin), виводжу в консоль, а там на місцях українських слів "казахстанські".
Раніше я вже працював з файлами і там такої проблеми не було. Єдина різниця між тодішніми програми і поточную це відсутність заголовка "pch.h", який в мене підключався за замовчуванням, але я якось відключив цю функцію, коли шарився в настройках середовища(це лише припущення, точно не пригадую). Не підкажете мені варіанти вирішення проблеми?
Якщо потрібно можу кинути код, не прикріплюю його зразу, бо він великий і недописаний.

2

Re: Українська в консолі!

мо ось ця стаття допоможе https://replace.org.ua/topic/2021/

3

Re: Українська в консолі!

struct ElShop
{
    int number;
    int id;
    char name[20];
    char firm[15];
    int year;
    float price;
    char garant[5];
};
void rewrite(FILE *file, ElShop *shop)//перезапис з txt в  bin
{
    int i = 0;
    FILE *fb = fopen("Base.bin", "r+b");
    while (!feof(file))
    {
        fscanf(file,
            "%i %i %s %s %i %f %s",
            &shop[i].number,
            &shop[i].id,
            shop[i].name,
            shop[i].firm,
            &shop[i].year,
            &shop[i].price,
            shop[i].garant
        );
        fwrite(&shop[i], sizeof(ElShop), 1, fb);
    }
    rewind(fb);
    while (!feof(fb))
    {
        fread(&shop[i], sizeof(ElShop), 1, fb);
        printf(
            " %i %i %s %s %i %.2f %s\n",
            shop[i].number,
            shop[i].id,
            shop[i].name,
            shop[i].firm,
            shop[i].year,
            shop[i].price,
            shop[i].garant
        );
    }
}

4

Re: Українська в консолі!

FakiNyan написав:

мо ось ця стаття допоможе https://replace.org.ua/topic/2021/

Завжди юзаю

#include <Windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

просто в мене у структуру не записуються кириличні літери *WALL*

5

Re: Українська в консолі!

grinyuk309 написав:

в мене у структуру не записуються кириличні літери

Як саме ви це перевіряєте? Ставлю на те, що записуються, але не в тому кодуванні, в якому ви перевіряєте.

Подякували: mrofon1

6

Re: Українська в консолі!

koala написав:
grinyuk309 написав:

в мене у структуру не записуються кириличні літери

Як саме ви це перевіряєте? Ставлю на те, що записуються, але не в тому кодуванні, в якому ви перевіряєте.

Я висловився дуже загально

7 Востаннє редагувалося Droid 77 (26.10.2020 04:03:17)

Re: Українська в консолі!

grinyuk309 написав:

Єдина різниця між тодішніми програми і поточную це відсутність заголовка "pch.h"

Що в тому файлі написано?

Але все ж більш схильний до міркувань пана koala відносно кодування.
Ще може бути таке як, лінкер не знає що існує така мова через криво встановлену операційну систему..

P. S.
Та взагалі такий трабл може бути будь через що..
Так і не вдалося середовище Dev-C++ з компонувальником GCC примусити повноцінно працювати з і та ї.
А от в середовищі Microsoft Visual Studio все добре без зайвих питань.

P . P. S.
Ось ще що згадав..
Є така вігня як залежність. Тобто якщо працюємо в консолі то функція SetConsoleСP() працює тільки зі шрифтом Lucida Console. Це налаштовується в налаштуваннях консолі.

8 Востаннє редагувалося Torbins (26.10.2020 21:45:41)

Re: Українська в консолі!

Шрифти, які використовуються в консолі, повинні мати українські літери. Дефолтний шрифт не має української "і". Виберіть замість нього щось сучасніше, і тоді SetConsoleCP(1251) буде достатньо.

9 Востаннє редагувалося grinyuk309 (30.10.2020 20:42:55)

Re: Українська в консолі!

https://replace.org.ua/uploads/images/9488/0ef24ecf97b8c3b2ba31bb10ec49d936.jpg

З кодуванням вроді все ок

10

Re: Українська в консолі!

А можете ще 3-4 різні програми з різним кодуванням використати? Ну, щоб взагалі нічого не зрозуміти?
Блокнот працює з Юнікодом, Visual Studio - швидше за все, з CP1251, консоль - з CP866.

11 Востаннє редагувалося grinyuk309 (30.10.2020 21:31:58)

Re: Українська в консолі!

koala написав:

А можете ще 3-4 різні програми з різним кодуванням використати? Ну, щоб взагалі нічого не зрозуміти?
Блокнот працює з Юнікодом, Visual Studio - швидше за все, з CP1251, консоль - з CP866.

Вибачте мене за мою тупість, просто я максимально заплутав себе з цим всім. Річ була в блокноті. Програма поводилась по різному залезно від того як я створював його, через ПКМ (fopen("file.txt","r+")) чи за допомогою "w+". В результаті, після багатьох спроб, я спіймав саме той блокнот з яким все працює добре.

12 Востаннє редагувалося grinyuk309 (30.10.2020 21:37:38)

Re: Українська в консолі!

koala написав:

Блокнот працює з Юнікодом

Запрацювало коли кодування блокнота змінилось з Юнікоду на ANSI

13

Re: Українська в консолі!

Torbins написав:

Шрифти, які використовуються в консолі, повинні мати українські літери. Дефолтний шрифт не має української "і". Виберіть замість нього щось сучасніше, і тоді SetConsoleCP(1251) буде достатньо.

Якщо точніше, там проблема не просто в «шрифтах без українських літер», а в растрових шрифтах, з якими перемикання кодової сторінки робить щось незрозуміле. Годяться лише векторні (Consolas, Lucida Console або інші додатково встановлені для консолі) — кодову сторінку 1251 можливо відобразити лише з ними.