Wie haben korrekte Unicode-und ANSI-Umlenkung der Ausgabe auf cmd.exe?
Wenn Sie das tun, Automatisierung unter windows und den Sie umleiten der Ausgabe von verschiedenen Befehlen (interne cmd.exe
oder extern, werden Sie feststellen, dass Ihre log-Dateien, enthält eine Kombination von Unicode-und ANSI-Ausgang (das heißt, Sie sind unwirksam und werden nicht geladen, auch in den Viewern/Editoren).
Ist es möglich zu machen cmd.exe die Arbeit mit UTF-8? Diese Frage ist nicht über das display, s über stdin/stdout/stderr-Umleitung und Unicode.
Ich bin auf der Suche nach einer Lösung, die Ihnen Folgendes ermöglichen:
- leiten Sie die Ausgabe des internen Befehle, um eine Datei mit UTF-8
- umleiten der Ausgabe des externen Kommandos mit Unterstützung von Unicode, um die Dateien aber als UTF-8 kodiert.
Wenn es unmöglich ist, zu erhalten, diese Art von Konsistenz mit batch-Dateien, gibt es eine andere Möglichkeit dieses problem zu lösen, wie die Verwendung von python-scripting für diese? In diesem Fall würde ich gerne wissen, ob es möglich ist, die Unicode-Erkennung allein (Benutzer mithilfe der Skripting sollte nicht merken, wenn die genannten tools wird die Ausgabe von Unicode oder nicht, es wird nur erwartet, um zu konvertieren, die Ausgabe auf UTF-8.
Einfachheit halber gehen wir davon aus, dass, wenn das Werkzeug die Ausgabe ist nicht-Unicode wird Sie als UTF-8 (keine codepage-Konvertierung).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
chcp
zum ändern der aktiven code-Seite. Dies wird für die Umleitung der text-als auch:Halten Sie im Verstand, obwohl, dass dies keinen Effekt haben, wenn
cmd
gestartet wurde mit der/u
Schalter, der die Kräfte Unicode (UTF-16 in diesem Fall) Umleitung der Ausgabe. Wenn der Schalter aktiv ist, dann alle Ausgaben werden in UTF-16LE, unabhängig von der codepage-set mitchcp
.Beachten Sie auch, dass die Konsole unbrauchbar für die interaktive Ausgabe bei Rasterschriftarten. Ich bin immer lustige Fehlermeldungen in diesem Fall:
Also entweder eine vernünftige setup (TrueType-schriftart für die Konsole) oder ziehen Sie nicht diesen stunt bei der Verwendung der Konsole interaktiv und mit einem Pfad mit nicht-ASCII-Zeichen.
chcp 65001
keinen Sinn macht.WriteFile()
- API gibt die Anzahl der codepoints geschrieben statt der Anzahl der bytes, die geschrieben wurden, die ist, was dokumentiert ist. Diese API ist letztlich aufgerufen, die von den meisten C-library Funktionen wieprintf()
und von den meisten scripting-Sprachen wie Perl, PHP und Ruby. Jeder code, die überprüfen, ob ein Schreibvorgang erfolgreich war durch den Vergleich der Anzahl der gesendeten bytes und die Anzahl der bytes zurückgegeben wird scheitern. Code, der verwendet die zurückgegebenen Zahl zu bewegen, die Ausgabe-cursor wird in Folge verstümmelten text beim drucken von nicht-ASCII-text.cmd
) in eine text-Datei. Es hielt die Ausgabe von ANSI, also alle nicht-ASCII-Zeichen falsch waren. Ich verwendetchcp 65001
ändern Sie die codepage und bingo! die text-Datei enthält dann die korrekten Unicode-Zeichen. Jedoch, als ich eine UTF-8 batch-Datei, mit etwas so einfaches wieecho ‽
es angezeigt falsch mit codepage 437 und gar nicht mit 65001. Umleitung zu einer Datei verursacht keine Ausgabe mit codepage 65001 und richtig - Ausgabe mit codepage 437. ಠ_ఠohne
Mir geholfen. Ich hatte wide character in print-Warnung.