\0 символ вместо русских букв .NET

При вводе текста буквами кириллицы вместо букв в строку записываются символы \0.

Ввожу "Привет", а записывается в переменную следующее:

что оказывается в строке

Пробовал менять кодировку, не помогло. Винда стоит на английском, может в этом проблема..

\0 в консоли выглядят как обычные пробелы.


Ответы (1 шт):

Автор решения: aepot

В русской винде по умолчанию в консоли стоит 866 кодовая страница. Если я выставляю UTF-8, то получаю такое же поведение, как у вас. Вы можете настроить кодовую страницу принудительно.

static void Main(string[] args)
{
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    Console.OutputEncoding = Encoding.GetEncoding(866);
    Console.InputEncoding = Encoding.GetEncoding(866);
    Console.WriteLine($"Input [{Console.InputEncoding.CodePage}] {Console.InputEncoding.EncodingName}");
    Console.WriteLine($"Output [{Console.OutputEncoding.CodePage}] {Console.OutputEncoding.EncodingName}");
    string s = Console.ReadLine();
    Console.WriteLine(s);
}

Вывод в консоль

Input [866] Cyrillic (DOS)
Output [866] Cyrillic (DOS)
привет, мир
привет, мир

Возможно прокатит, если вы только настроите InputEncoding, при этом можно не трогать OutputEncoding.

→ Ссылка