c++ - RTF文本是否为空

标签 c++ text rtf

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

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

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}

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

最佳答案

唯一可靠的方法是编写您自己的 RTF 解析器 [spec] , 使用类似 LibRTF 的库,或者您可能会考虑保持 RichTextControl 处于打开状态并使用新的 RTF 文档更新它,而不是每次都销毁该对象。

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

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

任何不是空白的内容都应该是文档内容,尽管这可能有一些异常(exception),因此您需要在大量 RTF 样本上进行测试。

关于c++ - RTF文本是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840995/

相关文章:

java - 使用 OpenCSV 写入列而不是行

text - 如何从头开始创建一个非常简单的文本编辑器?

python - 使用python将rtf转换为pdf

java - 富文本格式到纯文本

c++ - 找到循环系统中两个值之间最小差异的最佳方法?

c++ - 将禁用的复制构造函数置于私有(private)状态

c++ - 通过索引从 QJsonObject 获取值

c++ - 停在 "Exception Unhandled"的类和 visual studio 2019 未捕捉到异常

javascript - 纯 Javascript - 在 DOM 中查找/替换单词列表

java - 使用 iText 从 Java 生成 RTF 时,条码字体未在 MS Word 中动态加载