我需要从 rtf 格式的字符串中减去文本。
我有一个 rtf 格式的字符串 std::wstring sString= L"{ tf1 nsi nsicpg1252\deff0 ouicompat\deflang2057{ onttbl{ 0 nil prq12 charset0 Times New Roman;}} {\*\generator Riched20 10.0.19041} iewkind4\uc1 \pard 0 s24 你好\par } “
如何从变量 sString 中获取字符串“HELLO”?
由于您使用的是 Windows(并且假设您不是在寻找跨平台解决方案),因此有一种方法可以在不使用任何外部库的情况下执行此操作。你要做的是:
RICHEDIT
子窗口。因为这应该是一个子窗口,所以它确实需要一个有效的父窗口,但这并不重要。
向它发送带有EM_STREAMIN
标志的
SF_RTF
消息以加载您的RTF。数据实际上是从回调函数请求的,所以那里需要一些技巧。
向其发送 (
EM_STREAMOUT
)[https://learn.microsoft.com/en-us/windows/win32/controls/em-streamout] 消息,并设置 SF_TEXT
标志以检索相应的纯文本。这将重复调用您指定的回调函数,直到没有更多要检索的内容,因此您可能希望每次都将数据附加到 std::string
或类似的。
销毁您在步骤 1 中创建的窗口(或者如果您打算重新使用它,您可以让它继续运行)。
搞定有点繁琐,但也不是那么难。准备做一些背景阅读。