You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不依赖System.Windows.Forms的.NET Standard RTF转纯文本实现方案

无Windows Forms依赖的RTF转纯文本实现方案

微软官方目前没有推出可跨平台用于.NET Standard的System.Text.Rtf类库,以下是两种可行的落地方式:

方案1:使用第三方跨平台类库(推荐)

推荐使用兼容.NET Standard的开源RTF处理库RtfPipe,可直接通过NuGet安装,调用逻辑非常简单:

private static string RtfToPlainText(string rtf)
{
    return RtfPipe.Rtf.ToText(rtf);
}

该库无需依赖任何Windows专属组件,对RTF格式的兼容度也比较高,满足绝大多数常规场景的转换需求。

方案2:轻量自定义实现(无第三方依赖)

如果你的场景中RTF格式相对简单,不想引入额外依赖,可以自己实现基础的RTF标记剔除逻辑,示例代码如下:

using System.Text;

private static string RtfToPlainText(string rtf)
{
    if (string.IsNullOrEmpty(rtf))
        return string.Empty;

    var plainText = new StringBuilder();
    bool inGroup = false;
    bool inCommand = false;

    for (int i = 0; i < rtf.Length; i++)
    {
        char c = rtf[i];
        switch (c)
        {
            case '{':
                inGroup = true;
                inCommand = false;
                break;
            case '}':
                inGroup = false;
                inCommand = false;
                break;
            case '\\':
                if (inGroup)
                {
                    inCommand = true;
                    // 处理Unicode转义特殊逻辑
                    if (i + 1 < rtf.Length && rtf[i + 1] == 'u')
                    {
                        i += 2;
                        int numStart = i;
                        while (char.IsDigit(rtf[i])) i++;
                        if (int.TryParse(rtf.AsSpan(numStart, i - numStart), out int unicodeVal))
                        {
                            plainText.Append((char)unicodeVal);
                        }
                        if (rtf[i] == '?') i++;
                        inCommand = false;
                    }
                }
                break;
            case ' ':
                if (inCommand)
                {
                    inCommand = false;
                    break;
                }
                goto default;
            default:
                if (!inGroup || inCommand) continue;
                plainText.Append(c);
                break;
        }
    }
    return plainText.ToString().Trim();
}

注意:该自定义实现仅支持常规简单RTF格式转换,复杂格式(如嵌套表格、特殊样式、嵌入对象等)可能存在转换误差,建议仅在可控场景下使用。

内容的提问来源于stack exchange,提问作者Thorberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:15:04