Ответ 1
В этом вопросе много истории, я буду лапшу об этом некоторое время. Приложения в режиме консоли могут работать только с 8-битным кодированием текста. Это восходит к дизайнерскому решению, сделанному 42 года назад Ken Thompson и др., Когда они разработали Unix. Основная особенность Unix заключалась в том, что терминал ввода-вывода выполнялся через каналы, и вы могли объединять трубы вместе, чтобы подавать вывод одной программы на вход другого. Эта функция также была реализована в Windows и поддерживается .NET также с помощью свойств ProcessStartInfo.RedirectStandardXxxx.
Хорошая функция, но это стало проблемой, когда операционные системы начали использовать Unicode. Windows NT была первой, которая полностью была Unicode. Символы Юникода всегда должны быть закодированы, общий выбор тогда был UCS, позже преобразованный в utf-16. Теперь проблема с перенаправлением ввода-вывода, программа, которая выплескивает 16-разрядные кодированные символы, не будет работать хорошо, когда она перенаправляется на программу, которая все еще использует 8-битные кодированные символы.
Кредит Кен Томпсон, а также найдя решение этой проблемы, изобрел кодировку utf-8.
Это работает и в Windows. Простое приложение в консольном режиме, вы должны повторно назначить свойство Console.OutputEncoding:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Ĥėļŀō ŵŏŗłđ");
Console.ReadLine();
}
}
Теперь вы столкнулись с другой проблемой, шрифт, выбранный для окна консоли, скорее всего, не сможет отобразить текст. Нажмите Alt + Space, чтобы вызвать системное меню, "Свойства", вкладку "Шрифт". Вам нужно будет выбрать не растровый шрифт. Выбор очень тонкий, на Vista и вы можете выбрать Consolas. Повторно запустите свою программу, и символы с акцентом должны отображаться правильно. К сожалению, проблема с программным шрифтом в консоли - проблема, вам нужно задокументировать этот шаг конфигурации. Кроме того, шрифт вроде Consolas не имеет полного набора возможных символов Unicode. Вероятно, вы увидите прямоугольники для кодов Unicode, для которых у него нет глифов. Все неудобное напоминание о том, что создание GUI-программы действительно лучший выбор.