Как использовать рисование прямоугольника высокими символами ASCII в консольном приложении Visual Studio 15?
У меня есть консольное приложение Win32, которое играет в игру жизни в окне CMD.
Я хотел бы нарисовать рамку вокруг поля, используя некоторые стандартные символы рисования, такие как: (186: ║), (187: ╗) (188: ╝), (200: ╚), (201: ╔), (205: =) но я никуда не денусь.
Во-первых, во время сборки я получаю предупреждения, такие как: "предупреждение C4566: символ, представленный именем универсального символа" \u2551 ", не может быть представлен в текущей кодовой странице (1252)"
Код будет работать, но он будет отображать что-то еще вместо символов рисования блока. Я просмотрел столько свойств, сколько смог найти, но не нашел места для изменения текущей кодовой страницы.
Есть идеи, как и где это изменить? Или это то, что мне нужно изменить в Windows, возможно? Я использую Win 7 Pro, если это имеет значение.
Я изменил кодовую страницу редактора VS на 850 (западноевропейская DOS), но это не повлияло на исполняемый файл.
1 ответ
Nota Bene: "высокий ASCII" и расширенный-ascii недостаточно конкретны, чтобы иметь смысл. (Пожалуйста, просто прекратите использовать эти термины.)
Напоследок: на вашей консоли должен быть выбран шрифт, поддерживающий кодировку и символы, которые вы хотите использовать. Это не должно быть проблемой для рисования символов с 1981 года. Но вы можете проверить это, проверив настройки консоли и используя charmap
,
Лучше не связываться с кодировкой исходного кода C# по умолчанию. UTF-8 великолепен.
Затем используйте символы, которые вы хотите использовать в своем исходном коде, в качестве буквенных единиц кода UTF-16. Итак, "║" вместо 186 - но "\u2551", если нужно. Это делает код намного проще для чтения.
Console.OutputEncoding
Лучше всего использовать UTF-8 для вывода, если только он не поддерживается или неудобен в использовании.
Если можете, измените кодировку консоли на UTF-8, используя chcp 65001
команда. Если вы не можете, вернитесь и измените код Console.OutputEncoding на то, что использует ваша консоль (например, кодовая страница 437).
Вот пример:
class Program
{
static void Main(string[] args)
{
var codePage = Console.OutputEncoding.CodePage.ToString();
var length = codePage.Length;
Console.WriteLine($"╔{new String('═', length)}╗");
Console.WriteLine($"║{codePage}║");
Console.WriteLine($"╚{new String('═', length)}╝");
}
}
Это отображает это после того, как я делаю chcp 65001 в cmd.exe:
╔═════╗
║65001║
╚═════╝
И это, если я запустил его, не выполнив сначала chcp:
╔═══╗
║437║
╚═══╝
И это, после того, как я делаю chcp 850 в cmd.exe:
╔═══╗
║850║
╚═══╝