TransWikia.com

Символы Unicode выводятся по разному на версиях ОС

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).

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

One Answer

Получилось сделать без средств 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP