Символы Unicode выводятся по разному на версиях ОС
Мне нужно выводить в консоль символ █ (код символа 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).
Как это исправить?
Ответы (1 шт):
Получилось сделать без средств 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. (ну или я накосячил :)
Зато теперь символы выводятся правильно.