ProcessStartInfo startInfo = new ProcessStartInfo("CMD.exe");
startInfo.Arguments = "/c " + URL;
Process p = new Process();
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.CreateNoWindow = true;
p = Process.Start(startInfo);
string original = p.StandardOutput.ReadToEnd();
string result1 = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(original));
string result2 = Encoding.BigEndianUnicode.GetString(Encoding.BigEndianUnicode.GetBytes(original));
string result3 = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(original));
string result4 = Encoding.UTF32.GetString(Encoding.UTF32.GetBytes(original));
string result5 = Encoding.UTF7.GetString(Encoding.UTF7.GetBytes(original));
string result6 = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(original));
Run Code Online (Sandbox Code Playgroud)
cmd输出包含俄语字母,无法使用我尝试的所有编码正确解码.请帮忙.
我试过了:
startInfo.StandardOutputEncoding = Encoding."all possible encodings";
Run Code Online (Sandbox Code Playgroud)
但没有帮助.
有任何想法吗?
C4d*_*C4d 19
老问题,但没有可能的正确答案.
这里是:
process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
Run Code Online (Sandbox Code Playgroud)
850是标准的cmd页面.因此,使用该应用程序的用户将获得正如使用命令行本身时所期望的字符.
这个解决了德国操作系统上的所有符号问题.
OEM代码页:
437(美国)
720(阿拉伯语)
737(希腊语)
775(波罗的海)
850(多语种拉丁语I)
852(拉丁语II)
855(西里尔语)
857(土耳其语)
858(多语种拉丁语I +欧元)
862(希伯来语) )
866(俄语)
Net*_*tep 11
这对我有用:
startInfo.StandardOutputEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage)
Run Code Online (Sandbox Code Playgroud)
首先,您需要为控制台设置正确的字体.稍稍运行应用程序(请参阅下面的第二个代码示例),单击"属性"并更改字体.
现在,您需要为三件事设置编码:在第一个应用程序中(作为子进程执行),这是控制台输出编码.在父进程应用程序中,如果要查看结果,则需要执行相同操作,还需要执行相同操作,但还需要设置标准输出编码System.Diagnostics.ProcessStartInfo.此外,如果你使用一些输入,你应该在输入中需要所有三件事.
在我的系统上,除了UTF-8之外的所有UTF都会抛出异常.让它成为:目前可能只实现了一个UTF(在我的例子中是Windows 7 Pro).
首先,让我们看看如何编写简单输出Unicode文本的应用程序:
namespace WriteAndPresentUnicode {
using System;
class Program {
static void Main(string[] args) {
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("????? ??-??????..."); // "We are writing in Russian..."
} //Main
} //class Program
} //namespace WriteAndPresentUnicode
Run Code Online (Sandbox Code Playgroud)
现在,让我们看看如何通过重定向输出将其作为智能流程启动:
namespace ReadUnicode {
using System;
using System.Diagnostics;
using System.IO;
class Program {
const string application = "WriteAndPresentUnicode.exe";
static void Main(string[] args) {
Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(application);
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcessStartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8; // this is the most important part, to get correct myString, see below
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
StreamReader myStreamReader = myProcess.StandardOutput;
string myString = myStreamReader.ReadToEnd();
myProcess.WaitForExit();
myProcess.Close();
Console.InputEncoding = System.Text.Encoding.UTF8;
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine(myString);
Console.WriteLine("Press any key...");
Console.ReadKey(true);
} //Main
} //class Program
} //namespace ReadUnicode
Run Code Online (Sandbox Code Playgroud)
-Tested-
| 归档时间: |
|
| 查看次数: |
14017 次 |
| 最近记录: |