0

Мне нужно выводить в консоль символ █ (код символа 2588). Для того, чтобы он отображался правильно - добавляю строку SetConsoleOutputCP(CP_UTF8);, без неё получаю "тЦИ" вместо символа.

Также пробовал:

#include <fcntl.h>
_setmode(_fileno(stdout), _O_U8TEXT);
_setmode(_fileno(stdin), _O_U8TEXT);
_setmode(_fileno(stderr), _O_U8TEXT);

Но так и не смог заставит это работать. Получаю:

Invalid parameter passed to C runtime function.

И сама проблема:

На моём компьютере с Windows 10 Pro символ выводится правильно, но на другом компьютере с Windows 10 Корпоративная 2016 10.0.14393 получаю символ "рамка квадратика", то есть, как я понял, универсальный символ, если система не может найти нормальный. Шрифт и его размер в консоли на обоих компьютерах одинаковый (Lucida Console).

Как это исправить?

NoName
  • 199
  • 7

1 Answers1

0

Получилось сделать без средств QT.

Можно использовать расширенный cout -> wcout:

#include <fcntl.h>
#include <io.h>
_setmode(_fileno(stdout), _O_U16TEXT); // добавить в main()
wcout << L"█";

Ключ L указывает на то, что следуюущая после него строка является строкой Unicode. В этом случае можно убрать строку SetConsoleOutputCP(CP_UTF8);, она больше не требуется.


Но в случае использования wcout придётся отказаться от обычного cout, иначе вы будете получать ошибку Invalid parameter passed to C runtime function. (ну или я накосячил :)

Зато теперь символы выводятся правильно.

NoName
  • 199
  • 7
  • 2
    Лучше используйте кроссплатформенный Qt всё же или почитайте http://utf8everywhere.org/ – dIm0n Jul 25 '20 at 11:43
  • думаю, что в этом случае Qt - это космическими ракетами по комарам. – KoVadim Jul 25 '20 at 13:51