1

このコードを使用して、.NET から php の HTML purifier を呼び出そうとしています:

    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 変数に格納し、その変数を出力にエコー バックしようとしているだけです。

何か案は?

4

2 に答える 2

3

ポインタをありがとう。私は実際にそれを解決することができました。問題は、入力と出力の両方に 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();
于 2009-02-10T05:21:00.090 に答える
2

試す

myProcess.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
于 2009-02-10T02:46:46.343 に答える