Я могу правильно отображать стандартные символы ASCII (до 127), такие как "сердце", "заметьте", вы знаете, что я имею в виду. Я хотел бы также отображать те, которые я могу использовать для рисования стен (например, U0205), но это не работает. Ну, это работает, но выглядит "?". Как я могу их отобразить? Спасибо.
Приложения в режиме консоли ограничены кодировкой 8-битной кодовой страницы. По умолчанию на многих машинах используется IBM437, кодовая страница, соответствующая старому набору символов IBM PC. Вы можете изменить кодовую страницу, назначив свойство OutputEncoding:
Console.OutputEncoding = Encoding.UTF8;
Но теперь у вас типичная проблема с шрифтом. Консоли по умолчанию имеют шрифт "Терминал", старый шрифт устройства с глифами в нужном месте для создания набора символов IBM PC. Существует не так много шрифтов, которые могут создавать правильные глифы, которые соответствуют кодовым точкам Unicode. Консолас об этом, доступный в 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".
Проблема связана с консольным приложением, а не с вашей программой. Стандартная консоль в windows (cmd.exe), похоже, не поддерживает Unicode правильно - например, попробуйте скопировать строку ниже и вставить непосредственно в окно cmd.exe:
Fußball Ö ü
PowerShell, похоже, страдает от той же проблемы.
Одним из возможных решений вашей проблемы является создание выделенного окна/формы для использования в качестве "выходной консоли" вместо использования реальной консоли, через которую было выполнено приложение.