Warum stürzt csc.exe ab, als ich die Ausgabecodierung zuletzt als UTF8 belassen habe?

Ich habe eine sehr seltsame Sache oder bin darauf gestoßen.

Ich frage mich, ob andere haben und warum es passiert.

Mit dieser Zeile ein einzeiliges Programm ausführenSystem.Console.WriteLine(System.Console.OutputEncoding.EncodingName); Ich sehe die Kodierung istWestern European (DOS)

Fei

Hier ist eine Liste einiger Codepages1200 Unicode und65001 utf-8 undWindows-1252 Western European (Windows) und850 Western European DOS vonhttps: //msdn.microsoft.com/en-us/library/system.text.encoding (v = vs.110) .aspx

Sag, ich schreibe ein Cis-Programm, um die Codierung in utf-8 zu ändern

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);
}
}

Es funktioniert, es druckt

Western European (DOS)
Unicode (UTF-8)

Jetzt, wenn ich csc erneut starte, stürzt csc ab.

Ich habe meinen Arbeitsspeicher 14 Stunden lang mit memtest überprüft (8 Durchgänge). Ich ließ meine Festplatte laufen, alles in Ordnung. Und das ist definitiv nicht die, das ist ein Codierungsproblem. Ich weiß das, denn wenn ich eine neue cmd-Eingabeaufforderung öffne und dann csc ausführe, stürzt das nicht ab.

Wenn Sie also dieses cis-Programm ausführen, wird die Shell so geändert, dass beim nächsten Ausführen von csc csc selbst auf diese Weise abstürzt.

Wenn ich den folgenden Code kompiliere, dann starte ich ihn, dann starte ich csc, dann starte ich csc oder csc whatever.cs, dann stürzt csc ab.

So schließen Sie die Eingabeaufforderung cmd, Öffnen Sie eine neue.

Dieses Mal experimentieren Sie mit Kommentar und Kommentar in der zweiten Zeile des Programms

Ich finde, dass wenn die zweite Zeile (die Zeile, die die Codepage in 850 (DOS Western Europe) ändert) vorhanden ist, sie beim nächsten Ausführen von csc nicht abstürzt.

Wenn ich diese zweite Zeile auskommentiere, sodass das Programm beendet wird und die Codepage / Codierung in UTF-8 geändert wird, stürzt csc beim nächsten Ausführen ab.

// Kommentiere die letzte Zeile aus und // dies wird ausgeführt, führt aber beim nächsten Mal zum Absturz von 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); 
  }
}

Ich bin nicht die einzige Person, die auf so etwas gestoßen ist

obwohl dort keine Erklärung gefunden wurdehttps: //social.msdn.microsoft.com/Forums/vstudio/en-US/0e5f477e-0c32-4e88-acf7-d53d43d5b566/c-command-line-compiler-cscexe-immediately-crashes-when-run-in -code-page-65001-utf8? forum = csharpgeneral

Ich kann damit umgehen, indem ich sicherstelle, dass in der letzten Zeile die Codepage auf 850 eingestellt ist. Wie ich gleich erläutern werde, ist das eine unzureichende Lösung.

Auch ich möchte wissen, ob dies ein Problem mit CSC ist, das auch andere haben. Oder irgendwelche anderen Lösungen.

hinzugefüg

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



}
}

Die Zeile hinzufügen / die letzten Zeilen auskommentieren, damit ich @ ha

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

würde den Absturz stoppen, ist aber eine unzureichende Lösung, weil zum Beispiel .. Wenn ich die Ausgabe eines Programms in eine Datei umleiten möchte, dann brauche ich UTF8 von Anfang bis Ende, sonst funktioniert es nicht

dies funktioniert mit der Codepage 850 Zeile unkommentiert

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

Wenn ich die letzten Zeilen auskommentiere und somit die Codepage auf 850 ändere, stürzt csc beim nächsten Durchlauf nicht ab, aber die Umleitung funktioniert nicht und r.r enthält dieses Zeichen nicht.

Added 2

Hans Antwort lässt mich eine andere Art bemerken, diesen Fehler auszulösen

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>