Я пытаюсь использовать WriteConsoleOutput
из WinApi для записи символов в буфер окна командной строки. Дело в том, что я действительно хотел бы писать такие символы, как ☺
, прямо в исходный код, как есть, вместо того, чтобы использовать какую-то кодировку/обозначение вроде '\uFFFF'
или '0xFF'
, так как я их тоже не понимаю (различия между кодовыми страницами/наборами символов и т. д.)Запись символа юникода (?) Непосредственно из исходного кода в WriteConsoleOutput
Код ниже демонстрирует простейшую форму моей проблемы. Выполнение этого кода не печатает ☺
в окне командной строки, а вопросительный знак (?
).
#include <Windows.h>
int main()
{
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
CHAR_INFO c[1] = {0};
COORD cS = {1, 1};
COORD cH = {0, 0};
SMALL_RECT sr = {0, 0, 0, 0};
c[0].Attributes = FOREGROUND_INTENSITY;
c[0].Char.UnicodeChar = '☺';
WriteConsoleOutput(h, c, cS, cH, &sr);
Sleep(5000);
return 0;
}
Это жизненно важно для моего кода для вывода на экран одинаково между всеми версиями Windows, независимо от установленных языков и б/у. Насколько мне известно (что, по общему признанию, абсолютно минимально), мне нужно будет установить определенную кодовую страницу (которая, надеюсь, будет поддерживаться командной строкой на любом языке Windows).
Я пробовал:
• Переход от использования CHAR_INFO.UnicodeChar
к CHAR_INFO.AsciiChar
в • возился вокруг с SetConsoleCP
SetConsoleOutputCP
и функций, но у меня нет ни малейшего понятия о том, как использовать их, чтобы помочь мне с этой проблемой.
• Изменение Visual Studio -> Проект -> Свойства проекта .. -> Набор символов настройка на все возможные значения.
• В дополнение к вышеупомянутым настройкам WriteConsoleOutputA
или WriteConsoleOutputW
• Изменение кодировки файла исходного кода на UTF-8 с (/ out) сигнатурой.
В моем проекте я программная настройка командной строки шрифта 8x8 Terminal, который, насколько мне известно, не поддерживает фактические символы Юникода. Доступные символы отображаются here. Эти символы включают «☺», поэтому я не совсем уверен, что мой вопрос касается юникода. Я понятия не имею. Пожалуйста помоги.
Вам нужно будет использовать c [0] .Char.UnicodeChar = L'☺ '; И убедитесь, что компилятор понимает ваш исходный код, используйте File> Advanced Save Options> select «Unicode (UTF-8 с подписью) - Codepage 65001». Выпущенную сейчас спецификацию достаточно, чтобы компилятор знал, что исходный код закодирован в utf8. –
@ hans-passant Это дает мне ':' (двоеточие) вместо смайлика. Даже с кодировкой, сохраненной как UTF-8. – user6003859
Символ U + 263A, 3A == ':'.L важен. –