Процесс запущен из .NET, но RedirectedStandardOutput не поддерживает UTF-8 - PullRequest
1 голос
/ 10 февраля 2009

Я пытаюсь вызвать PHP-очиститель php из .NET, используя этот код:

    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();

.. и все работает нормально, кроме ... Я не могу вернуть символы, отличные от asci. Например, при вводе некоторых корейских символов во входных данных возвращается вопросительный знак.

Это происходит, даже если функция HTMLPurifier обойдена, и я просто пытаюсь просто обеспечить ввод .NET, сохранить его в переменной php и вернуть эту переменную обратно в выходной файл.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2009

Спасибо за указатель. Мне действительно удалось это решить. Подвох заключался в том, чтобы явно указать 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.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();
2 голосов
/ 10 февраля 2009

Попробуйте

myProcess.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...