Вывод эмодзи: странность escape-последовательности xterm?

#unicode #terminal #emoji #windows-terminal

#юникод #терминал #эмодзи #windows-терминал

Вопрос:

У меня есть приложение .NET Core. Единственное, что он делает, это:

System.Console.Out.WriteLine("x1b%G🍜");

Когда я запускаю это на «новой» вкладке Powershell в терминале Windows, он выводит

??

Когда я запускаю его во второй раз на той же вкладке, он правильно выводит:

🍜 (эмодзи рамэн)

Выполнение одной и той же строки дважды в одном процессе не работает — это ?? дважды.

(Если я не включу x1b%G escape-последовательность, она «никогда» не появится в виде эмодзи рамэн)

То, что я пытаюсь сделать

Выясните, что именно «включает» смайлики для терминала (будь то терминал Windows, новый хост в Windows 11 и т. Д.).

Я подумал , что это может быть x1b%G escape-последовательность xterm для включения UTF-8. Может быть, так оно и есть? …но почему бы и нет, пока процесс не завершится и не будет запущен снова в powershell?

Другие примечания

Если я не использую пустой профиль Powershell, а вместо этого использую тот, который выдает необычные подсказки ( Set-PoshPrompt -Theme powerlevel10k_rainbow например)… затем смайлики «активируются» / «включены». Так, может быть, есть что-то, что делает Powershell или posh prompt, что я могу воспроизвести?

Правильный ответ на этот вопрос будет…

…скажите мне, что мне нужно сделать, чтобы смайлики правильно отображались в моем терминале, без необходимости запускать процесс дважды.

Ответ №1:

Необходимо установить кодировку вывода таким образом:

System.Console.OutputEncoding = Encoding.UTF8;