Как использовать рисование прямоугольника высокими символами 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║
╚═══╝
Другие вопросы по тегам