Befehlsausgabe funktioniert nach dem Ändern der Codepage nicht

413
Ricardo Zorio

Ich habe ein seltsames Problem gefunden, als ich die verdrehte Welt der Zeichenkodierung untersuchte. Wenn ich 'tree' eingebe, funktioniert der Befehl wie erwartet, aber wenn ich dann 'chcp 65001' (UTF-8) und dann 'tree' eingebe, bricht er ab.

dh

> tree > chcp 65001 > tree 

Befehlsausgabe funktioniert nach dem Ändern der Codepage nicht

Dies ist in Windows 7, Vanilla Cmd, Spanisch. Beim Umleiten der Ausgabe in eine Datei ist der Inhalt vor und nach dem chcp (voller "ÀÄÄÄa") gleich.

Einige Untersuchungen haben gezeigt, dass die Kodierung OEM-850 ist.

Ich weiß, das sieht nach einer überflüssigen Frage aus, aber beim Kompilieren von Programmen (meistens mit gcc) habe ich das gleiche Problem.

Befehlsausgabe funktioniert nach dem Ändern der Codepage nicht

Die Schalter / A und / U für cmd haben auch nicht geholfen.

Befehlsausgabe funktioniert nach dem Ändern der Codepage nicht

1

1 Antwort auf die Frage

0
harrymc

Dieses Problem mit Nicht-ASCII-Eingaben ist in der Konsole für alle Windows-Versionen bis einschließlich Windows 10 reproduzierbar. Der Prozess des Konsolenhosts, dh conhost.exenicht für UTF-8 (Codepage 65001), wurde nicht für die Unterstützung aktualisiert es konsequent.

Insbesondere bei Nicht-ASCII-Eingaben wird ein leerer Lesevorgang bewirkt, und ein leerer Lesevorgang wird als Dateiende betrachtet. Das Lesen der Eingabe durch die Konsole wird angehalten, was zu einer abgeschnittenen Ausgabe führt.

Der / U-Schalter von cmd.exeist auch nicht nützlich, da er nur für interne Befehle funktioniert. In manchen Anwendungen erhalten Sie möglicherweise bessere Ergebnisse, indem Sie die Befehlsausgabe in eine Datei umleiten. Die Datei enthält jedoch keine UTF-8- Byte-Auftragsmarke (BOM) .

Kurz gesagt, erwarten chcp 65001Sie nicht viel und Sie werden nicht enttäuscht sein. Die einzige Unicode-Version, die unter Windows gut funktioniert, ist 16-Bit-Unicode.