已从.NET启动进程,但RedirectedStandardOutput不支持UTF-8
我试图使用以下代码从.NET调用php的HTML净化器:已从.NET启动进程,但RedirectedStandardOutput不支持UTF-8,.net,process,utf-8,streamwriter,.net,Process,Utf 8,Streamwriter,我试图使用以下代码从.NET调用php的HTML净化器: 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.
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函数是ByPasd函数,并且我只是简单地提供输入.NET,将其存储在php变量中,然后将该变量回显到输出中,这种情况也会发生
有什么想法吗 试试看
myProcess.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
试一试
谢谢你的指点。我确实设法解决了这个问题。关键在于显式地为输入和输出指定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();
谢谢你的指点。我确实设法解决了这个问题。关键在于显式地为输入和输出指定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();