当前位置: 首页 > 编程语言 > C#

process.standardInput编码问题分享

时间:2023-04-10 21:06:22 C#

process.standardInput编码问题我对process.standardInput编码的编码有问题。我在我的Windows窗体应用程序中使用了一些进程,但输入应该是UTF-8。Process.StandardInput.Encoding是只读的,所以我不能将它设置为UTF-8,它会获取Windows默认编码,这会破坏UTF-8中的本机字符。程序中使用了2个进程,一个将输出写入文件,另一个读取。由于我可以将输出编码设置为UTF-8,这部分工作正常,但回读是我遇到问题的部分。我将包括我使用流程的部分。ProcessStartInfo信息=newProcessStartInfo("mysql");info.RedirectStandardInput=true;info.RedirectStandardOutput=false;info.Arguments=mysqldumpstring;info.UseShellExecute=false;info.CreateNoWindow=true;.StartInfo=信息;p1.开始();字符串res=file.ReadToEnd();文件.关闭();MessageBox.Show(p1.StandardInput.Encoding.EncodingName);//=其中编码应为Encoding.UTF8;p1.StandardInput.WriteLine(res);p1.关闭();使用StreamWriter(而不是StandardInput)创建下一个方法会得到预期的结果:StreamWriterutf8Writer=newStreamWriter(proc.StandardInput.BaseStream,Encoding.UTF8);utf8Writer.Write(...);utf8Writer.Close();我刚遇到这个问题,无法使用Console.InputEncoding技术,因为它似乎只适用于控制台应用程序。所以我尝试了Victor的回答,但我遇到了与评论者MvanGeest相同的问题,BOM仍在添加中。一段时间后,我发现可以创建一个禁用BOM的UTF8Encoding的新实例,这样可以防止写入BOM。下面是Victor示例的修改版本,显示了更改。StreamWriterutf8Writer=newStreamWriter(proc.StandardInput.BaseStream,newUTF8Encoding(false));utf8Writer.Write(...);utf8Writer.Close();希望这可以节省一些时间。另一种解决方案是在创建进程之前设置ConsoleInputEncoding。Console.InputEncoding=Encoding.UTF8;开始工作现在将我的应用程序输出类型设置为控制台应用程序,并设法在表单出现之前隐藏控制台窗口。它基本上只有在程序运行和控制台窗口弹出和隐藏时才能正常工作。以上就是C#学习教程:process.standardInput编码问题分享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多加关注—staticclassProgram{[DllImport("kernel32.dll")]staticexternboolAttachConsole(intdwProcessId);私有constintATTACH_PARENT_PROCESS=-1;[DllImport("kernel32.dll",SetLastError=true)]publicstaticexternboolSetConsoleCP(uintwCodePageID);,SetLastError=true)]publicstaticexternuintGetConsoleCP();[DllImport("user32.dll")]publicstaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll")]staticexternboolShowWindow(IntPtrhWnd,intnCmdShow);//////应用程序的主要入口点。///[STAThread]staticvoidMain(){Console.Title="Stok";//将控制台输出重定向到父进程;//必须在对Console.WriteLine()的任何调用之前AttachConsole(ATTACH_PARENT_PROCESS);System.Console.InputEncoding=Encoding.UTF8;IntPtrhWnd=FindWindow(null,"Stok");//在这里放置你的控制台窗口标题if(hWnd!=IntPtr.Zero){//隐藏窗口ShowWindow(hWnd,0);//0=SW_HIDE}Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);应用程序.Run(newForm1());}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: