Console.Write () - отображать расширенные символы ascii? - PullRequest
2 голосов
/ 16 октября 2010

Я могу правильно отображать стандартные символы ASCII (до 127), такие как «сердце», «примечание», вы понимаете, о чем я. Я хотел бы также отобразить те, которые я могу использовать для рисования стен (например, U0205), но это не работает .. хорошо, это работает, но выглядит как "?". В любом случае, как я могу их отобразить? Спасибо.

Ответы [ 2 ]

16 голосов
/ 16 октября 2010

Приложения консольного режима ограничены 8-битной кодировкой кодовой страницы. На многих компьютерах по умолчанию используется IBM437, кодовая страница, соответствующая старому набору символов IBM PC. Вы можете изменить кодовую страницу, назначив свойство OutputEncoding:

        Console.OutputEncoding = Encoding.UTF8;

Но теперь у вас обычно есть проблема со шрифтом. По умолчанию для консолей используется шрифт Terminal, старый шрифт устройства с глифами в нужном месте для создания набора символов IBM PC. Существует не так много доступных шрифтов, которые могут создавать правильные символы, соответствующие кодовым точкам Unicode. Consolas об этом, доступен на Vista и Win7.

Но это не то, что вы спрашиваете, я думаю, я предполагаю, что вы на самом деле спрашиваете о старых символах рисования коробки. Это работает без каких-либо проблем с настройками консоли, вам просто нужно использовать правильные символы Юникода. Вот пример, который должен выжить при копировании и вставке:

class Program {
    static void Main(string[] args) {
        Console.WriteLine("╒════════╕");
        Console.WriteLine("│ Hello  │");
        Console.WriteLine("│ world  │");
        Console.WriteLine("╘════════╛");
        Console.ReadLine();
    }
}

Чтобы найти эти символы, используйте апплет Windows charmap.exe. Установите флажок «Расширенный вид» и введите «поле» в текстовом поле «Поиск», сетка будет заполнена символами рисования поля. Первый пригодный для использования в консоли - \ u250c.

1 голос
/ 16 октября 2010

Проблема, скорее всего, связана с консольным приложением, а не с вашей программой.Стандартная консоль в Windows (cmd.exe), по-видимому, не поддерживает Юникод должным образом - например, попробуйте скопировать приведенную ниже строку и вставить непосредственно в окно cmd.exe:

Fußball ………

Похоже, что PowerShell также страдает от той же проблемы.

Одним из возможных решений вашей проблемы является создание выделенного окна / формы для использования в качестве "консоли вывода" вместо использованияфактическая консоль, через которую было выполнено приложение.

...