Почему происходит сбой csc.exe, когда я в последний раз оставляю выходную кодировку как UTF8?

Я испытываю или столкнулся с очень странной вещью.

Интересно, есть ли у других и почему это происходит.

Запустив однострочную программу с этой строкойSystem.Console.WriteLine(System.Console.OutputEncoding.EncodingName); Я вижу, что кодировкаWestern European (DOS)

хорошо

Вот список некоторых кодовых страниц1200 Unicode а также65001 utf-8 а такжеWindows-1252 Western European (Windows) а также850 Western European DOS отhttps://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx

Скажем, я пишу программу на C, чтобы изменить кодировку на utf-8

class sdf
{
  static void Main(string[] args)
{
System.Console.WriteLine(System.Console.OutputEncoding.EncodingName);
  System.Console.OutputEncoding=System.Text.Encoding.GetEncoding(65001);
System.Console.WriteLine(System.Console.OutputEncoding.EncodingName);
}
}

Работает, печатает

Western European (DOS)
Unicode (UTF-8)

Теперь, когда я снова запускаю csc, csc падает.

Я проверил свою RAM в течение 14 часов, 8 проходов, с memtest. Я запустил chkdsk мой жесткий диск, все хорошо. И это определенно не те, это проблема кодирования. Я знаю это, потому что, если я открою новое приглашение cmd, а затем запустлю csc, он не вылетит.

Таким образом, выполнение этой острой программы меняет оболочку таким образом, что в следующий раз при простом запуске csc произойдет аварийное завершение работы самого csc.

Если я скомпилирую приведенный ниже код, затем запустите его, затем запустите csc, затем запустите csc или csc what.cs, я получаю сбой csc.

Поэтому закройте командную строку, откройте новую.

На этот раз поэкспериментируйте с комментариями и раскомментируйте вторую строку программы

Я обнаружил, что если есть вторая строка (строка, которая изменяет кодовую страницу на 850 (DOS Western Europe)), то при следующем запуске csc произойдет сбой.

Принимая во внимание, что если я закомментирую эту вторую строку, поэтому программа завершает работу с измененной кодовой страницей / кодировкой на UTF-8, то при следующем запуске csc произойдет сбой csc.

// раскомментируем последнюю строку, а затем // выполняется, но в следующий раз происходит сбой csc.

class asdf
{
  static void Main()
  {

     System.Console.OutputEncoding = System.Text.Encoding.UTF8; //output and to utf8
     System.Console.OutputEncoding=System.Text.Encoding.GetEncoding(850); 
  }
}

Я не единственный человек, который столкнулся с чем-то вроде этого

хотя там не было найдено объясненийhttps://social.msdn.microsoft.com/Forums/vstudio/en-US/0e5f477e-0c32-4e88-acf7-d53d43d5b566/c-command-line-compiler-cscexe-immediately-crashes-when-run-in- кода страницы 65001-utf8? форум = csharpgeneral

Я могу справиться с этим, убедившись, что последняя строка устанавливает кодовую страницу на 850. Хотя, как я объясню, это неадекватное решение ..

Также я хотел бы знать, если это какая-то проблема с CSC, которая есть и у других. Или любые другие решения.

добавленной

uuu1.cs

// uuu1.cs
class asdf
{
static void Main()
{

System.Console.InputEncoding  = System.Text.Encoding.UTF8;
System.Console.OutputEncoding = System.Text.Encoding.UTF8;

// not unicode.  UTF8 means redirection will then work

System.Console.WriteLine("ჵ");

// try redirecting too..

// and try  checking for csc crash or not
//System.Console.OutputEncoding=System.Text.Encoding.GetEncoding(850);
//System.Console.InputEncoding =System.Text.Encoding.GetEncoding(850);
//problem is that when that is commented, it breaks the redirection



}
}

Добавление строки / раскомментируйте последние строки, чтобы я

System.Console.OutputEncoding = System.Text.Encoding.GetEncoding (850);

остановил бы сбой, но это неадекватное решение, потому что, например. Если я хочу перенаправить вывод программы в файл, то мне нужен UTF8 от начала до конца, иначе он не работает

это работает с строкой кодовой страницы 850 без комментариев

c:\blah>uuu1>r.r<ENTER>  
c:\blah>type r.r <ENTER>  
c:\blah>ჵ  

Если я раскомментирую последние строки, изменяя кодовую страницу на 850, тогда csc не сбоит при следующем запуске, но перенаправление не работает и r.r не содержит этот символ.

Добавлено 2

Ответ Хана заставляет меня заметить еще один способ вызвать эту ошибку

C:\Users\harvey\somecs3>csc<ENTER>
Microsoft (R) Visual C# Compiler version 4.0.30319.18408
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

warning CS2008: No source files specified
error CS1562: Outputs without source must have the /out option specified

C:\Users\harvey\somecs3>chcp  65001<ENTER>
Active code page: 65001

C:\Users\harvey\somecs3>csc<ENTER>  <-- CRASH

C:\Users\harvey\somecs3>

Ответы на вопрос(2)

Ваш ответ на вопрос