Stack Overflow на русском Asked on January 1, 2022
Мне нужно выводить в консоль символ █ (код символа 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).
Как это исправить?
Получилось сделать без средств 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.
(ну или я накосячил :)
Зато теперь символы выводятся правильно.
Answered by NoName on January 1, 2022
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP