Як писати спеціальні символи (0x80..0x9F) на консолі Windows?

Я хотів би мати цей код:

System.Console.Out.WriteLine ("œil");

відображати œil замість oil , як це робиться в моїй тестовій програмі.

Код Console.OutputEncoding за замовчуванням встановлюється для параметра Western European (DOS) (встановлено значення CodePage для 850 та WindowsCodePage до 1252) на мою систему. Набір символів містить спеціальні динаміки OE та OE (як це видно у статті статті Вікіпедії на Windows-1252 ), але якось підозрюю, що персонажі, не знайдені в ISO-8859- 1 встановлюється, відхиляється/замінюється.

Символи типу â , ç та ін. Правильно відображаються на консолі, але будь-якого символу в розширеному діапазоні 0x80 ... 0x9F немає.

Як правильно показати їх на консолі?

5
Я роз'яснив проблеми з кодовою сторінкою; System.Text.SBCSCodePageEncoding повертає як кодову сторінку, так і кодову сторінку Windows, і я заплутав обидва. Вибачте
додано Автор Pierre Arnaud, джерело
Дуже незвично отримати кодову сторінку 1252 на консолі, це майже завжди 437 кодової сторінки IBM PC OEM. У котрих немає гліфа для \ u0153. Ви можете змінити OutputEncoding, але тоді вам також доведеться змінити шрифт консолі.
додано Автор Hans Passant, джерело
До речі, "Західноєвропейська (DOS)" - це кодова сторінка 850, а не 1252. Він містить всі символи з ISO 8859-1 (тобто вікна 1252 в 0xA0-0xFF), що, можливо, викликало деяке плутанину. Сама функція .NET використовує Unicode, але перекладається (іноді погано), коли на консолі надсилається нестандартний шрифт.
додано Автор Random832, джерело

2 Відповіді

Подобається це:

Console.OutputEncoding = System.Text.Encoding.UTF8;
System.Console.Out.WriteLine("œil");

Не забудьте вибрати шрифт для свого консольного вікна, який підтримує потрібні вам символи. Це знімок екрана мого консольного вікна за допомогою шрифту Consolas.

enter image description here

5
додано
Дійсно, це не спрацьовує. У моєму Windows 7 x64, виконання коду створює хрест за символами ôil .
додано Автор Pierre Arnaud, джерело
Секрет дійсно є в шрифті ... Використання Consolas як шрифт робить вивід UTF8 правильним, подібно до того, що Девід опублікував на своєму скріншоті. Дуже дякую.
додано Автор Pierre Arnaud, джерело
І, до речі, тут пов'язане питання:
додано Автор Pierre Arnaud, джерело
Не працює. Він надрукує щось схоже на + ль \
додано Автор Pierre-Alain Vigeant, джерело
Див stackoverflow.com/questions/1802600/& hellip; про те, як змінити шрифт консолі в C# за допомогою interop.
додано Автор Pierre-Alain Vigeant, джерело
Працює добре для мене. Який шрифт у вас у вікні консолі?
додано Автор David Heffernan, джерело
Будьте обережні, що Lucida Console має багато символів неправильно. Використовуйте щось інше, наприклад Consolas.
додано Автор ggPeti, джерело

Ви можете встановити кодування виводу на консолі, як це ...

Console.OutputEncoding = Encoding.UTF8;
2
додано
Тут ехо тут ....... ;-)
додано Автор David Heffernan, джерело
Так, я роблю це сама по собі +1
додано Автор David Heffernan, джерело
Я здогадуюсь я закінчився коментуючи неприйняту сторінку :)
додано Автор Prashanth, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug