我有一个以下的精简版片段:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace ConsoleApp2
{
public class Echo
{
public List<string> Run(string arg)
{
var output = new List<string>();
var bytes = Encoding.UTF8.GetBytes($"/C echo {arg}");
var x = new UnicodeEncoding(false, true, true);
var p = new Process
{
StartInfo = new ProcessStartInfo("cmd.exe")
{
Arguments = x.GetString(Encoding.Convert(Encoding.UTF8, x, bytes)),
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
StandardOutputEncoding = Encoding.UTF8
}
};
p.OutputDataReceived += (sender, a) =>
{
if (a.Data != null) output.Add(a.Data);
};
p.Start();
p.BeginOutputReadLine();
p.WaitForExit();
p.Close();
return output;
}
}
}
当我运行此命令时,如果输入了unicode字符,则该字符将丢失:
var dot = "•";
var echo = new Echo();
var result = echo.Run(dot)?.FirstOrDefault();
Console.WriteLine($"[{dot}] [{result}] {dot == result}");
关于如何保存&#39;的任何想法这些?
答案 0 :(得分:0)
这里的问题是echo使用的编码与提供的参数的编码不兼容。
通常,process.Start()调用的应用程序需要能够使用所需的编码输出数据。
就我而言,它是7zip文件列表。使用l -slt ...
时,路径中的Unicode字符“丢失”。使用l -slt ... -scsUTF-8 -sccUTF-8
解决了案例。