2009-02-10 5 views
1

J'essaie d'appeler le purificateur HTML de PHP .NET en utilisant ce code:Commencé processus de .NET mais RedirectedStandardOutput ne prend pas en charge UTF-8

Process myProcess = new Process(); 

    myProcess.StartInfo.FileName = "C:\Path\to\php.exe"; 
    myProcess.StartInfo.Arguments = "C:\Path\to\purify.php"; 
    myProcess.StartInfo.UseShellExecute = false; 
    myProcess.StartInfo.RedirectStandardOutput = true; 
    myProcess.StartInfo.RedirectStandardInput = true; 

    myProcess.Start(); 

    StreamWriter myStreamWriter = myProcess.StandardInput; 

    String inputText; 

    inputText = txtCodes.Text; 
    if (inputText.Length > 0) 
    { 
     myStreamWriter.Write(inputText); 
    } 
    myStreamWriter.Close(); 

    labMsg.Text = myProcess.StandardOutput.ReadToEnd(); 

    myProcess.WaitForExit(); 

    myProcess.Close(); 

.. et tout fonctionne bien sauf ... Je Je ne suis pas capable de récupérer des caractères non-asci. Par exemple, la présence de caractères coréens dans l'entrée renvoie des points d'interrogation en sortie. Cela se produit même si la fonction HTMLPurifier est désactivée et j'essaie simplement de fournir l'entrée .NET, de la stocker dans la variable php et de renvoyer cette variable à la sortie.

Des idées?

Répondre

2

Essayez

myProcess.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8; 
3

Merci pour le pointeur. J'ai réussi à le résoudre. Le problème était de spécifier explicitement UTF-8 pour les deux entrées et sorties. En fin de compte le code de woking ressemble à ceci:

Process myProcess = new Process(); 

    myProcess.StartInfo.FileName = "C:\Path\to\php.exe"; 
    myProcess.StartInfo.Arguments = "C:\Path\to\purify.php"; 

    myProcess.StartInfo.UseShellExecute = false; 
    myProcess.StartInfo.RedirectStandardOutput = true; 
    myProcess.StartInfo.RedirectStandardInput = true; 
    myProcess.StartInfo.StandardOutputEncoding = Encoding.UTF8; 

    myProcess.Start(); 
    StreamWriter myStreamWriter = new StreamWriter(myProcess.StandardInput.BaseStream, Encoding.UTF8); 

    String inputText; 
    inputText = txtCodes.Text; 

    if (inputText.Length > 0) 
    { 
     myStreamWriter.Write(inputText); 
    } 

    myStreamWriter.Close(); 

    labMsg.Text = myProcess.StandardOutput.ReadToEnd(); 


    myProcess.WaitForExit(); 

    myProcess.Close(); 
Questions connexes