Browse Source

Fix AnsiProcess encoding to not include BOM mark

pull/240/head
Ionite 1 year ago
parent
commit
d7ad3b43d0
No known key found for this signature in database
  1. 46
      StabilityMatrix.Core/Processes/AnsiProcess.cs

46
StabilityMatrix.Core/Processes/AnsiProcess.cs

@ -10,22 +10,22 @@ public class AnsiProcess : Process
{
private AsyncStreamReader? stdoutReader;
private AsyncStreamReader? stderrReader;
public AnsiProcess(ProcessStartInfo startInfo)
{
StartInfo = startInfo;
EnableRaisingEvents = false;
StartInfo.UseShellExecute = false;
StartInfo.CreateNoWindow = true;
StartInfo.RedirectStandardOutput = true;
StartInfo.RedirectStandardInput = true;
StartInfo.RedirectStandardError = true;
// Need this to parse ANSI escape sequences correctly
StartInfo.StandardOutputEncoding = Encoding.UTF8;
StartInfo.StandardErrorEncoding = Encoding.UTF8;
StartInfo.StandardInputEncoding = Encoding.UTF8;
StartInfo.StandardOutputEncoding = new UTF8Encoding(false);
StartInfo.StandardErrorEncoding = new UTF8Encoding(false);
StartInfo.StandardInputEncoding = new UTF8Encoding(false);
}
/// <summary>
@ -35,23 +35,33 @@ public class AnsiProcess : Process
public void BeginAnsiRead(Action<ProcessOutput> callback)
{
var stdoutStream = StandardOutput.BaseStream;
stdoutReader = new AsyncStreamReader(stdoutStream, s =>
{
if (s == null) return;
callback(ProcessOutput.FromStdOutLine(s));
}, StandardOutput.CurrentEncoding);
stdoutReader = new AsyncStreamReader(
stdoutStream,
s =>
{
if (s == null)
return;
callback(ProcessOutput.FromStdOutLine(s));
},
StandardOutput.CurrentEncoding
);
var stderrStream = StandardError.BaseStream;
stderrReader = new AsyncStreamReader(stderrStream, s =>
{
if (s == null) return;
callback(ProcessOutput.FromStdErrLine(s));
}, StandardError.CurrentEncoding);
stderrReader = new AsyncStreamReader(
stderrStream,
s =>
{
if (s == null)
return;
callback(ProcessOutput.FromStdErrLine(s));
},
StandardError.CurrentEncoding
);
stdoutReader.BeginReadLine();
stderrReader.BeginReadLine();
}
/// <summary>
/// Waits for output readers to finish
/// </summary>

Loading…
Cancel
Save