RTF文本为空

Is RTF text empty

本文关键字:文本 RTF      更新时间:2023-10-16

在C++中有没有一种简单的方法来判断RTF文本字符串是否有任何内容,除了纯格式之外。

例如,这个文本只是格式化,这里没有真正的内容:

{rtf1ansiansicpg1252deff0deflang1033{fonttbl{f0fnilfcharset0 MS Sans Serif;}}

在RichTextControl中加载RTF文本不是一个选项,我想要一些快速工作并且需要最少资源的东西。

唯一可靠的方法是编写自己的RTF解析器[spec],使用像LibRTF这样的库,或者您可以考虑打开RichTextControl并用新的RTF文档更新它,而不是每次都销毁对象。

我相信RTF不是一种常规语言,因此RegEx无法正确解析(与HTML不同,尽管有数百万次尝试),但您不需要编写完整的RTF解析器。我将从一个简单的字符串解析器开始。尝试:

  1. 删除{\和}之间的内容
  2. 移除标签。标记以反斜杠\开头,后面跟着一些文本。如果反斜杠后面跟着空白,则它不是标记
  3. 文档应至少以一个大括号结尾,}

任何不是空白的内容都应该是文档内容,尽管这可能有一些例外,所以您需要在大量RTF样本上进行测试。