"Der Parameter ist falsch" beim Einstellen von Unicode als Konsolencodierung

StackOverflow https://stackoverflow.com/questions/419518

  •  03-07-2019
  •  | 
  •  

Frage

Ich bekomme den folgenden Fehler:

Unhandled Exception: System.IO.IOException: The parameter is incorrect.
 at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
 at System.IO.__Error.WinIOError()
 at System.Console.set_OutputEncoding(Encoding value)
 at (my program)

Wenn ich die folgende Codezeile ausführe:

 Console.OutputEncoding = Encoding.Unicode;

Irgendeine Idee warum? Ich erhalte diesen Fehler nicht, wenn ich die Codierung stattdessen auf UTF8 festlegt.

War es hilfreich?

Lösung

Coding.unicode ist UTF-16, das 2 Bytes verwendet, um alle Zeichen zu codieren. Die ASCII-Zeichen (englische Zeichen) sind in UTF-8 (einzelne Bytes, gleiche Werte) gleich. Deshalb kann dies der Grund sein, warum es funktioniert.

Ich vermute, dass die Windows -Befehlsschale Unicode nicht vollständig unterstützt. Komisch, dass die PowerShell 2-GUI UTF-16 (soweit ich weiß) unterstützt, aber das Programm macht dort die gleiche Ausnahme.

Der folgende Code funktioniert, was zeigt, dass das Konsolenobjekt seine Ausgabe weiterleitet und codieren.unicode unterstützt:

FileStream testStream = File.Create("test.txt");
TextWriter writer = new StreamWriter(testStream, Encoding.Unicode);
Console.SetOut(writer);            
Console.WriteLine("Hello World: \u263B");  // unicode smiley face
writer.Close(); // flush the output

Andere Tipps

Nach der Liste von Code -Seiten -Kennungen auf MSDN, Die UTF-16- und UTF-32-Kodierungen werden nur verwaltet:

1200   utf-16       Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201   unicodeFFFE  Unicode UTF-16, big endian byte order; available only to managed applications
12000  utf-32       Unicode UTF-32, little endian byte order; available only to managed applications
12001  utf-32BE     Unicode UTF-32, big endian byte order; available only to managed applications

Beispielsweise werden sie in der Registrierung nicht mit den anderen Systemcodeseiten unter hkey_local_maachine system currentControlset control nls Codepage aufgeführt.

Ich denke, es hat mit dem zu tun CodePage des Encoding du benutzt. Insbesondere sehen SetConsoleOutputCP -Funktion. Ich weiß nicht viel mehr, sorry.

Bearbeiten: Ich habe den Verweis auf die gemeldet SetConsoleOutputCP Da diese Funktion intern (durch Pinvoke) durch den (festgelegten Betrieb von) genannt wird Console.OutputEncoding.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top