Wie zu entschlüsseln cmd output korrekt?
ProcessStartInfo startInfo = new ProcessStartInfo("CMD.exe");
startInfo.Arguments = "/c " + URL;
Process p = new Process();
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.CreateNoWindow = true;
p = Process.Start(startInfo);
string original = p.StandardOutput.ReadToEnd();
string result1 = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(original));
string result2 = Encoding.BigEndianUnicode.GetString(Encoding.BigEndianUnicode.GetBytes(original));
string result3 = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(original));
string result4 = Encoding.UTF32.GetString(Encoding.UTF32.GetBytes(original));
string result5 = Encoding.UTF7.GetString(Encoding.UTF7.GetBytes(original));
string result6 = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(original));
cmd Ausgabe enthält Russischen Briefe, dann kann das nicht richtig dekodiert, mit allen Codierungen, was ich versucht habe. Bitte helfen Sie.
Habe ich versucht:
startInfo.StandardOutputEncoding = Encoding."all possible encodings";
aber keine Hilfe.
irgendwelche Ideen?
Schauen Sie, was Sie tun! Sie sind nicht trans-coding nichts. Wenn Sie eine der UTFs, erhalten Sie einfach genau das gleiche wie original-string. Ihr "original" ist bereits ein string! Und es sollte schon den richtigen string, überprüfen Sie es. Generell benötigen Sie zum Lesen von raw-bytes (nicht Zeichen!) und dann codieren dann vorausgesetzt, einige Codierung. Codierung machen Sie einen string von byte-array und Umgekehrt, nicht als string aus string.
Konvertieren der Zeichenfolge, nachdem Sie gelesen haben, ist es zu spät. Müssen Sie die Zuweisung der startInfo.StandardOutputEncoding Eigenschaft. Versuchen Sie, einen Russischen code-Seite, die um 1251, 855, 866, 20866. Übergeben Sie die Anzahl an CultureInfo.GetCulture(). Yay für Unicode.
Wäre nicht schlecht zu tag die richtige Antwort.
Die Allgemeine Lösung ist hier: stackoverflow.com/questions/5910573/...
Konvertieren der Zeichenfolge, nachdem Sie gelesen haben, ist es zu spät. Müssen Sie die Zuweisung der startInfo.StandardOutputEncoding Eigenschaft. Versuchen Sie, einen Russischen code-Seite, die um 1251, 855, 866, 20866. Übergeben Sie die Anzahl an CultureInfo.GetCulture(). Yay für Unicode.
Wäre nicht schlecht zu tag die richtige Antwort.
Die Allgemeine Lösung ist hier: stackoverflow.com/questions/5910573/...
InformationsquelleAutor ggcodes | 2013-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alte Frage, aber keine richtige Antwort.
Hier ist es:
850 ist die standart cmd-Seite. Also der user ist mit der Anwendung bekommen die Charaktere so vor als würde er erwarten, dass bei der Verwendung der Befehlszeile selbst.
Diese einem gelöst alle symbol-Probleme auf einem deutschen OS für mich.
OEM-Codepages:
437 (US)
720 (Arabisch)
737 (Griechisch)
775 (Ostsee)
850 (Mehrsprachig Latein I)
852 (Latein II)
855 (Kyrillisch)
857 (Türkisch)
858 (Multilingual Latin I + Euro)
862 (Hebräisch)
866 (Russisch)
Finden Sie die Codepage für Ihr system: stackoverflow.com/a/5911430/200443
Für mich, Codierung.UTF ist das problem gelöst.
InformationsquelleAutor Tpx
Erste, Sie brauchen, um eine richtige schriftart für Ihre Konsole. Führen Sie die Anwendung mit einigen pause (siehe zweites code-Beispiel unten) einmal, klicken Sie auf "Eigenschaften" und ändern Sie die schriftart.
Nun, Sie müssen, um die Kodierung für drei Dinge: in der ersten Anwendung (ausgeführt werden wie ein Kind-Prozess), das ist die console-Ausgabe-Kodierung. In der parent-Prozess Anwendung ist, müssen Sie das gleiche tun, wenn Sie wollen, um das Ergebnis zu sehen, müssen Sie das gleiche tun, aber Sie müssen auch standard-Ausgabe-Kodierung in
System.Diagnostics.ProcessStartInfo
. Auch, wenn Sie eine Eingabe, sollten Sie alle drei Dinge in Eingang.Auf meinem system, alle UTFs außer UTF-8, eine exception zu werfen. Lass es sein: nur ein UTF ist wohl momentan implementiert ist (Windows 7 Pro, in meinem Fall).
Erste, lassen Sie uns sehen, wie können Sie schreiben, die Anwendung, die einfach die Ausgänge der Unicode-text:
Nun, mal sehen, wie die starten Sie es wie ein chile Prozess mit Umleitung der Ausgabe:
Getestet-
InformationsquelleAutor SyntaxError
Die Lösung zu verwenden UTF8-Codierung zu schreiben, die Konsole ist gut, wenn die Konsole-Anwendung liegt bei Ihnen. Aber wenn du mit einem standart Windows-utilites wie 'netsh' es hilft nicht.
Standart cmd-code-Seiten ist OEM.
Zum Beispiel für die russische Sprache:
OEM-Codepages:
437 (US)
720 (Arabisch)
737 (Griechisch)
775 (Ostsee)
850 (Mehrsprachig Latein I)
852 (Latein II)
855 (Kyrillisch)
857 (Türkisch)
858 (Multilingual Latin I + Euro)
862 (Hebräisch)
866 (Russisch)
InformationsquelleAutor m_skipper
Diese funktioniert bei mir:
InformationsquelleAutor Netstep
Versuchen Sie dies, wenn nichts anderes hilft!
Nach vielen versuchen & Leid, hier ist was ich herausgefunden: egal, wie UTF8, Ihre output-stream ist, egal wie man 65001, die Dinge werden nicht funktionieren, bis Sie beginnen, eine Kind-Prozess innerhalb der Kind-Prozess. Klingt albern, aber wahr.
Aussehen:
Hoffe, dies erspart Ihnen mindestens so viel Zeit wie es brauchte von meinem Elenden Leben!
InformationsquelleAutor dkellner