Por que o csc.exe está travando quando deixei a codificação de saída como UTF8 pela última vez?

Estou tendo, estou tendo ou tive uma coisa muito estranha.

Gostaria de saber se os outros têm e por que isso está acontecendo.

Tendo executado um programa de uma linha com esta linhaSystem.Console.WriteLine(System.Console.OutputEncoding.EncodingName); Eu vejo a codificação éWestern European (DOS)

Bem

Aqui está uma lista de algumas páginas de código1200 Unicode e65001 utf-8 eWindows-1252 Western European (Windows) e850 Western European DOS dehttps://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx

Digamos que eu escreva um programa C sharp para alterar a codificação para 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);
}
}

Funciona, imprime

Western European (DOS)
Unicode (UTF-8)

Agora, quando executo o csc novamente, o csc trava.

Eu verifiquei minha RAM por 14 horas, 8 passes, com memtest. Corri chkdsk meu disco rígido, tudo bem. E definitivamente não são esses, é um problema de codificação. Eu sei disso porque se eu abrir um novo prompt do cmd e executar o csc, ele não trava.

Portanto, a execução desse programa c sharp altera o shell, de modo que da próxima vez que você executa o csc, o próprio csc trava.

Se eu compilar o código abaixo, executá-lo e, em seguida, executar csc, executar csc ou csc, seja o que for.

Então feche o prompt do cmd, abra um novo.

Desta vez, experimente comentar e descomentar a segunda linha do programa

Acho que se a segunda linha (a linha que altera a página de código para 850 (DOS Europa Ocidental)) estiver lá, ela não falhará na próxima vez que executar o csc.

Enquanto que se eu comentar essa segunda linha, o programa sair com a página de código / codificação alterada para UTF-8, então da próxima vez que o csc for executado, o csc trava.

// remova o comentário da última linha e, em seguida, // isso será executado, mas causará uma falha no csc na próxima vez.

class asdf
{
  static void Main()
  {

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

Eu não sou a única pessoa que encontrou algo assim

embora nenhuma explicação foi encontrada láhttps://social.msdn.microsoft.com/Forums/vstudio/en-US/0e5f477e-0c32-4e88-acf7-d53d43d5b566/c-command-line-compiler-cscexe-immedately-crashes-when-run-in- code-page-65001-utf8? forum = csharpgeneral

Eu posso lidar com isso, certificando-me de que a última linha defina a página de códigos como 850. Embora, como vou explicar, essa seja uma solução inadequada ..

Também gostaria de saber se este é algum problema com o CSC que outros também têm. Ou qualquer outra solução.

adicionado

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



}
}

Adicionando a linha / descomente as últimas linhas, então eu tenho

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

interromperia a falha, mas é uma solução inadequada, porque, por exemplo. Se eu quiser redirecionar a saída de um programa para um arquivo, preciso do UTF8 do começo ao fim, caso contrário não funcionará

isso funciona com a linha de página da página 850 descomentada

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

Se eu descomentar as últimas linhas, alterando a página de código para 850, então o csc não trava na próxima execução, mas o redirecionamento não funciona e r.r não contém esse caractere.

Adicionado 2

A resposta de Han me faz notar outra maneira de acionar esse erro

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>

questionAnswers(2)

yourAnswerToTheQuestion