Ich habe ein Problem mit der Codierung von process.standartInput Codierung. Ich verwende einen Prozess in meiner Windows-Formularanwendung, aber die Eingabe sollte UTF-8 sein. Process.StandardInput.Encoding ist nur lesbar, so dass ich es nicht auf UTF-8 setzen kann und es Windows-Standardcodierung erhält, die native Zeichen verschlechtert, die in UTF-8 gut sind. Im Programm werden 2 Prozesse verwendet, die Ausgabe in eine Datei schreiben und andere Lesevorgänge. Da ich Ausgabekodierung zu UTF-8 einrichten kann, dass Teil richtig funktioniert, aber das Zurücklesen ist der Teil, in dem ich Probleme habe. Ich werde den Teil einschließen, in dem ich den Prozess verwende.process.standardInput Codierung Problem
ProcessStartInfo info = new ProcessStartInfo("mysql");
info.RedirectStandardInput = true;
info.RedirectStandardOutput = false;
info.Arguments = mysqldumpstring;
info.UseShellExecute = false;
info.CreateNoWindow = true;
Process p1 = new Process();
p1.StartInfo = info;
p1.Start();
string res = file.ReadToEnd();
file.Close();
MessageBox.Show(p1.StandardInput.Encoding.EncodingName); //= where encoding should be Encoding.UTF8;
p1.StandardInput.WriteLine(res);
p1.Close();
Danke. Löst das Problem gut. Beachten Sie, dass dies auch für StandardOutput funktioniert. –
Leider scheint dies nicht mehr zu funktionieren - eine UTF16 (!) BOM (FF FE) steht noch vor den Daten. Nick's Workaround scheint die einzige, hässliche Lösung für den Moment zu sein. – MvanGeest
Siehe Antwort von Brendon unten ... –