我正在捕获变量中的 powershell 输出,但它包含正常绘制终端屏幕的 ANSI 字符。
如果我将文本直接放入 richTextBox 中,则绘制屏幕的特殊字符将不会呈现,并且出现任何可怕的但我期望的结果......
我尝试做一些事情,但我最多能做的就是创建一个清理文本的脚本:
private static string DecodeAndStripANSI(string input)
{
return RemoveANSI().Replace(input, "");
}
[System.Text.RegularExpressions.GeneratedRegex(@"\x1B\[[0-?]*[ -/]*[@-~]")]
private static partial System.Text.RegularExpressions.Regex RemoveANSI();
问题是这不是我想要的...我一直在寻找一些东西来帮助我逐行从 ANSI 转换为 RTF(或 UTF-8)格式,但我找不到它...如果有人的话有类似的东西,我很乐意向我展示你是如何做到的。
尝试这个功能,确保将其编译为程序集(例如ansiToRtf.dll)并加载到您的powershell的路径。
using System;
using System.IO;
using System.Text;
public class AnsiToRtfConverter
{
public static string Convert(string ansiText)
{
StringBuilder rtfText = new StringBuilder();
using (StringReader reader = new StringReader(ansiText))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Escape special characters in the line
line = line.Replace(@"\", @"\\").Replace("{", @"\{").Replace("}", @"\}");
// Convert ANSI to UTF-8
byte[] utf8Bytes = Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(line));
string utf8Text = Encoding.UTF8.GetString(utf8Bytes);
// Append RTF formatting
rtfText.Append(@"\par {\f1 " + utf8Text + @" \par}" + Environment.NewLine);
}
}
// Add RTF header and footer
string rtfHeader = @"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Courier New;}{\f1\fnil\fcharset0 Arial Unicode MS;}}";
string rtfFooter = @"}";
return rtfHeader + rtfText.ToString() + rtfFooter;
}
}