How to specify stdin encoding when starting a process with Process.Start in .NET

//
// When using the .NET System.Diagnostics.Process object to start a process, there is no provision
// for providing the character encoding for standard input. This is a problem for example when
// spawning a console application (such as perl.exe in my case) that expects 8-bit characters 
// encoded with a particular codepage (874, for Thai, in my case).
//
// Prior to .NET 2.0, there was also no provision for specifying the character encoding for 
// standard output. This was rectified with the addition of ProcessStartInfo.StandardOutputEncoding,
// but mysteriously enough, standard input was left out of this party.
//
// Here is a workaround (requires .NET 2.0 or greater; if you must run on earlier version of .NET,
// similar handling of the BaseStream for StandardOutput is possible):
//
		using System.Diagnostics;
		using System.IO;
		//...
		ProcessStartInfo psi = new ProcessStartInfo();

		psi.FileName = @"c:\foo\consoleapp.exe";
		psi.UseShellExecute = false;
		psi.RedirectStandardOutput = true;
		psi.StandardOutputEncoding = Encoding.GetEncoding(874);		// .NET 2.0 or greater
		psi.RedirectStandardInput = true;

		Process p = new Process();
		p.StartInfo = psi;
		p.Start();

		string stdin = "TIS-620 Thai text going in: \x0e01\x0e01\x0e01\x0e01\n";

		byte[] rg_b = Encoding.GetEncoding(874).GetBytes(stdin);

		Stream bs = p.StandardInput.BaseStream;
		bs.Write(rg_b,0,rg_b.Length);
		bs.Close();

		string stdout_out = p.StandardOutput.ReadToEnd();