从.NET启动流程,但RedirectedStandardOutput不支持UTF-8 [英] Started Process from .NET but RedirectedStandardOutput doesn't support UTF-8
问题描述
我正在尝试使用以下代码从.NET调用php的HTML净化器:
I am trying to call php's HTML purifier from .NET using this code:
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();
..,所有工作正常,除了...我无法找回非ASCII字符.例如,在输入中提供一些韩文字符会返回问号作为输出.
.. and all works fine except ... I am not able to get back non-asci characters. For example providing some Korean characters in the input returns questionmarks as output.
即使通过了HTMLPurifier函数,这种情况也会发生,我只是尝试简单地提供输入.NET,将其存储在php变量中,并将该变量回显为输出.
This happens even if the HTMLPurifier function is bypased and I am just trying to simple provide the input .NET, store it in php variable, and echo that variable back to output.
有什么想法吗?
推荐答案
感谢指针.我确实设法解决了.问题是为输入和输出都明确指定UTF-8.最后,唤醒代码如下所示:
Thanks for the pointer. I did actually managed to solve it. The catch was to explicitly specify UTF-8 for BOTH input and Output. In the end the woking code looks like this:
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();
这篇关于从.NET启动流程,但RedirectedStandardOutput不支持UTF-8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!