将 ANSI 转换为 RTF 格式

问题描述 投票:0回答:1

我正在捕获变量中的 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)格式,但我找不到它...如果有人的话有类似的东西,我很乐意向我展示你是如何做到的。

c# rtf .net-8.0 ansi
1个回答
0
投票

尝试这个功能,确保将其编译为程序集(例如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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.