Тема: В консолі заміть українських символів невідомі символи

Привіт, я почав вивчати С++ !
інформація:
    Компілятор g++ (переварює любу мову без "setlocale(LC_ALL,"Ukrainian");")
    З англійськими буквами працює нормально!
    Виводится в консоль: ���к�

/*
    ЗАВДАННЯ 2. Шляхом вирізання та склеювання отримати зі слова „балкон” слова „лоб”, „клан”
    і „колба”.
*/

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string kolba, klan, lob, ba, l, ko, n;

    kolba = "колба";
    klan = "клан";
    lob = "лоб";

    ba = kolba.substr(3, 2);
    l = lob.substr(0, 1);
    ko = kolba.substr(0, 2);
    n = klan.substr(3, 1);

    cout << ba << l << ko << n <<endl;
}

2

Re: В консолі заміть українських символів невідомі символи

До речі, використовував онлайн компілятори, компілятор "с++" все одно те ж саме!

3 Востаннє редагувалося ch0r_t (06.05.2021 19:47:27)

Re: В консолі заміть українських символів невідомі символи

Здається ви намагаєтесь індексувати методом substr рядок в юнікод, як простий char. Так як руна юнікоду не завжди рівна 1 байту, на виході отримуєте сміття (частину, байт, від всієї руни).

Або врахуйте що довжина руни 2 байти для Української або використовуйте відповідні методи для роботи з юнікодом в C++, що прекрасно знаходяться через пошукову систему.

Подякували: "mamkin haker", 0xDADA11C7, leofun013

4

Re: В консолі заміть українських символів невідомі символи

tchort написав:

Або врахуйте що довжина руни 2 байти для Української.

Вибачте, що турбую, але я не знайшов =(
і чому саме 2 байти?
я в вікіпедії прочитав що 4 потрібно.

5 Востаннє редагувалося ch0r_t (06.05.2021 21:09:40)

Re: В консолі заміть українських символів невідомі символи

UTF-8...valid character code points in Unicode using one to four one-byte (8-bit) code units.

Руни перемінної довжини, -тобто unicode utf-8 може використовувати від одного до чотирьох.
Латиниця, проста 1-байт (звісно є нюанси). Кирилиця (здається ледь не вся) - 2 байти. Азіатські символи деяких мов - більше.

Подякували: 0xDADA11C7, "mamkin haker"2

6

Re: В консолі заміть українських символів невідомі символи

Linux
2. wchar_t («широкий» текст)

    Кодування — UTF-32
    Розмір 1 символу — 4 байти
    sizeof(wchar_t) = 4

/del тему, всеодно вона нікому не потрібна.

7 Востаннє редагувалося Droid 77 (06.05.2021 21:30:35)

Re: В консолі заміть українських символів невідомі символи

"mamkin haker" написав:

Компілятор g++ (переварює любу мову без "setlocale(LC_ALL,"Ukrainian");")

Не стану стверджувати відносно Linux, а от в windows той g++ взагалі не розуміє української якщо мова системи відмінна від української.

8

Re: В консолі заміть українських символів невідомі символи

Droid 77 написав:
"mamkin haker" написав:

Компілятор g++ (переварює любу мову без "setlocale(LC_ALL,"Ukrainian");")

Не стану стверджувати відносно Linux, а от в windows той g++ взагалі не розуміє української якщо мова системи відмінна від української.

У мене стоїть мова системи англійська і все працює нормально.
Усі букви відображаються.
Щеб знати як зображення вставляти і редактувати повідомлення :D
PunBB bbcode test

9

Re: В консолі заміть українських символів невідомі символи

wchar_t в Linux - 4 байти (UTF-32), в Windows - 2 байти (UTF-16). От тільки китайські ієрогліфи по 2 символи UTF-16 займають. Але це wchar_t, літерали на L. У вас - однобайтові стрічки.

Розберіться для початку, яке саме кодування файлу ви використовуєте. І врахуйте, що консоль windows має усталене кодування cp866.
Так, і "компілятор c++" - це, швидше за все, псевдо для g++, тобто для того ж gcc.