Вывести char32_t как строку

  1. Что происходит когда мы выводим тип char, почему он выводит не число, а символ. char прогоняется через какую-то функцию, которая подставляет вместо кода символа символ?
  2. Почему char32_t выводит код символа, а не символ как char?
  3. Как сделать, чтобы char32_t выводил символ/строку вместо кода символа?
    char symbol_ch = 'Q';
    cout << symbol_ch << endl;

    wchar_t symbol_wct = L'Q';
    cout << symbol_wct << endl;

    char32_t symbolc32_t = U'Q';
    cout << symbolc32_t << endl;

Ответы (2 шт):

Автор решения: Sergey Tatarincev

Для вывода вайдовых строк используйте std::wcout

wchar_t text[] = L"Hello";
std::wcout << text << std::endl;

В случае использования кирилицы возникнут проблемы с кодировкой консоли, но это уже будет совсем другая история

→ Ссылка
Автор решения: AlexGlebe

Кодировки CP1251 , UTF-8 , UTF-32 - разные. А ваша консоль использует только одну. Сначала вы должны узнать свою кодировку консоли , а потом в программе ковертировать в неё.

Попробуйте конвертировать UTF-32 => UTF-8 Потом можно выводить как UTF-8.

# include <iostream>
# include <codecvt>
# include <locale>
using std::cout;
using std :: endl;
int main(){

    char symbol_ch = 'Q';
    cout << symbol_ch << endl;

    std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> cw;
    cout << cw.to_bytes(L"Алло") << endl;

    std::wstring_convert<std::codecvt_utf8<char32_t>,char32_t> cv;
    cout << cv.to_bytes(U"zß水?") << endl;

}

Q
Алло
zß水?
→ Ссылка