Frage

Ich habe ein wenig c # Konsolenprogramm, das einen Text mit Console.WriteLine ausgibt. Ich habe dann Rohr dieser Ausgabe in eine Text-Datei wie:

c:myprogram > textfile.txt

Allerdings ist die Datei ist immer eine ANSI-Textdatei, auch wenn ich mit dem Start cmd / u wechseln. cmd /? sagt über die Option / U:

  

/ U Ausgabe der internen   Befehle an ein Rohr oder eine Datei Unicode

sein

Und es macht in der Tat einen Unterschied, wenn ich ein

c:echo "foo" > text.txt

die text.txt ist Unicode (ohne BOM)

Ich frage mich, warum die Ausgabe meiner Konsolenprogramm in eine neue Datei kochend keine Unicode-Datei ebenfalls erstellen und, wie ich das ändern kann?

Ich verwenden nur Windows-Power Shell (die eine Unicode-Datei mit dem richtigen BOM produziert), aber ich würde noch gerne wissen, wie es mit cmd zu tun.

Danke!

War es hilfreich?

Lösung

Der Schalter / U, wie die Dokumentation sagt, beeinflusst, ob interne Befehle Unicode Ausgabe erzeugen. Ihr Programm ist nicht einer von cmd.exe internen Befehlen, so dass die Option / U wirkt sich nicht auf sie.

eine Unicode-Textdatei zu erstellen, müssen Sie Ihr Programm, um sicherzustellen, Text Unicode generiert.

Auch das kann nicht genug sein, though. Ich stieß auf diesem Blog von Junfeng Zhang beschreibt, wie Unicode-Text in einem Konsolenprogramm zu schreiben. Er prüft den Dateityp der Standardausgabe Griff. Bei Zeichendateien (eine Konsole oder LPT-Port), ruft er WriteFileW. Für alle anderen Arten von Griffen (einschließlich Plattendateien und Rohre), wandelt es die Ausgabezeichenfolge zu der aktuellen Codepage der Konsole. Ich fürchte, ich weiß nicht, wie das in .Net Begriffe übersetzt, though.

Andere Tipps

Ich hatte einen Blick, wie mscorlib implementiert Console.WriteLine, und es scheint, auf zu entscheiden, für welche Textausgabe Codierung zu verwenden, basierend auf einen Aufruf von GetConsoleOutPutCP . So bin zu raten, ich (aber noch nicht confimed), dass die Codepage zurück eine differnt ein für eine PS-Konsole als für eine cmd-Konsole, so dass mein Programm in die Tat nur ansi ausgibt, wenn von cmd ausgeführt wird.

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