Выполните очистку ( shift kbd> + cmd kbd> + k kbd>) и затем пересоберите проект
Encoding.Unicode - это UTF-16, который использует 2 байта для кодирования всех персонажи. Символы ASCII (английские символы) такие же в UTF-8 (одиночные байты, одинаковые значения), так что, возможно, именно поэтому он работает.
Я предполагаю, что командная оболочка Windows не полностью поддерживает Unicode. Забавно, что графический интерфейс Powershell 2 поддерживает UTF-16 (насколько мне известно), но программа выдает там то же исключение.
Работает следующий код, который показывает, что объект Console может перенаправлять свой вывод и поддерживать Encoding.Unicode:
FileStream testStream = File.Create("test.txt");
TextWriter writer = new StreamWriter(testStream, Encoding.Unicode);
Console.SetOut(writer);
Console.WriteLine("Hello World: \u263B"); // unicode smiley face
writer.Close(); // flush the output
Я думаю, что это имеет отношение CodePage
из Encoding
Вы используете. В особенности посмотрите Функцию SetConsoleOutputCP. Я не знаю намного больше, извините.
Править: Я сообщил о ссылке на SetConsoleOutputCP
потому что эта функция внутренне вызвана (через PInvoke) (операция присвоения) Console.OutputEncoding
.
Согласно списку идентификаторов кодовых страниц в MSDN , кодировки UTF-16 и UTF-32 доступны только для управления:
1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
12000 utf-32 Unicode UTF-32, little endian byte order; available only to managed applications
12001 utf-32BE Unicode UTF-32, big endian byte order; available only to managed applications
Например, они не указаны в реестре вместе с другими системными кодовыми страницами в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Nls \ CodePage.