如何在C#中确定文本格式

IEn*_*ble 4 .net c# format

有没有办法确定C#/ .NET中的文本格式

这样的事情会非常有用.

public TextFormat TextTools.GetTextFormat(string text);

switch(TextTools.GetTextFormat(mystring))
{

  case TextFormat.RichText: break;
  case TextFormat.PlainText: break;

}
Run Code Online (Sandbox Code Playgroud)

我在msdn上四处寻找,但找不到这样的工具

Adr*_*tti 7

这是一个非常启发式的检查,但你可以尝试从这样的东西开始构建自己的函数(当然你可以扩展它来处理不同的格式):

public static TextFormat GetFormat(string text) {
    if (text.TrimStart().StartsWith(@"{\rtf1", StringComparison.Ordinal))
        return TextFormat.RichText;

    return TextFormat.PlainText;
}
Run Code Online (Sandbox Code Playgroud)

更好的检查意味着您解析RTF文本以确保它不仅仅是一个似乎是RTF 的随机字符串.因为解析可能是扩展的(就时间而言)然后我建议首先快速检查以排除所有因为肯定不是RTF:

public static TextFormat GetFormat(string text) {
    if (text.TrimStart().StartsWith(@"{\rtf1", StringComparison.Ordinal)) {
        if (IsValidRtf(text))
            return TextFormat.RichText;
    }

    return TextFormat.PlainText;
}
Run Code Online (Sandbox Code Playgroud)

在最嵌套的情况下,if您可以决定如何处理看似RTF的文本,但它无效(在本例中我只是将其视为纯文本).一个可能的,天真的和低效的,实现IsValidRtf()依赖于RichTextBox控制实现(然后到Windows API实现)可能是:

private static bool IsValidRtf(string text) {
    try {
        new RichTextBox().Rtf = text;
    }
    catch (ArgumentException) {
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)