【发布时间】:2016-11-23 09:21:15
【问题描述】:
我尝试执行这段代码:
private void Test(object sender, RoutedEventArgs e)
{
ProcessStartInfo start = new ProcessStartInfo("cmd",
"/c \"wbadmin start recovert -version:02/26/2014-17:38 -itemtype:File - items:C:\test\"");
int exitCode;
using (Process proc = Process.Start(start))
{
proc.ErrorDataReceived += cmd_Error;
proc.OutputDataReceived += cmd_DataReceived;
proc.WaitForExit();
exitCode = proc.ExitCode;
}
}
private void cmd_DataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data == null) return;
var source = Encoding.Unicode;
var target = Encoding.UTF8;
var sBytes = source.GetBytes(e.Data);
var tBytes = Encoding.Convert(source, target, sBytes);
var tString = Encoding.UTF8.GetString(tBytes);
Console.WriteLine(tString);
}
但是我得到了这个字符串:“wbadmin 1.0 - ®≠·‚‡„¨•≠‚ ™Æ¨†≠§≠Æ©·‚‡Æ™® †‡Â®¢†Ê®®" 如何解码这个字符串?
【问题讨论】:
-
你能试试
source = Encoding.Utf8;和source = Encoding.GetEncoding(1251);吗? -
你需要使用 Encoding.GetEncoding(850); ,850 是标准的 cmd 页面。
-
850 不工作! var source = Encoding.GetEncoding(850); var target = 编码.UTF8;我得到了 tString == "wbadmin 1.0 - ??®?? ¬¬ ?®¬ ¤®© ???®?? ¤«? ???? ???"
-
你的命令行不应该包含 recovery 而不是 recovert?
-
没关系。我需要对控制台进行编码。我使用的是俄文版的 Windows Server 2012