<p>有三种,我不知道。<em>您可以通过在纯文本编辑器中打开该文件,或者只使用<code>less</code>/<code>more</code>/<code>cat</code>/<code>type</code>/任何方法将其打印到终端。在</p>
<hr/>
<p>首先,简单的情况:明文RTF。在</p>
<p>一个纯文本RTF文件以<code>{\rtf</code>开头,其中的所有文本都是纯文本(正如您所期望的那样),尽管有时文本的运行会被拆分成单独的运行,其中的格式化命令以<code>\</code>-开头。由于所有的格式化命令都是纯ASCII,如果您将纯文本RTF从一个字符集转换成另一个字符集(只要这两个字符集都是ASCII的超集,就像cp949和utf-8一样),它应该可以正常工作。在</p>
<p>但是,该文件也可能有一个格式化命令,该命令指定文件的写入字符集。这个命令看起来像<code>\ansicpg949</code>。当一个像Wordpad这样的RTF编辑器打开你的文件时,它会把你所有漂亮的UTF-8数据解释成cp949数据,除非你修复它,否则mojib会把它弄得一团糟。在</p>
<p>解决这个问题最简单的方法是找出编辑器想要为UTF-8文件放置什么字符集。也许是<code>\ansicpg65001</code>,也许是{<cd9>},也许是完全不同的东西。所以只需将一个简单的文件保存为UTF-8rtf,然后以纯文本的形式查看<em>it</em>,看看它有什么代替<code>\ansicpg949</code>,并用正确的字符串替换文件中的字符串。(注意,代码页65001并不是真正的UTF-8,但它很接近,而且很多微软代码都假设它们是相同的……)</p>
<p>另外,一些RTF编辑器(如Apple的TextEdit)会转义任何非ASCII字符(例如,<code>é</code>被存储为<code>\'e9</code>),因此没有什么可以转换的。在</p>
<p>最后,officeopenxml包含了一个称为RTF的XML规范,但实际上不是一回事。我相信很多RTF编辑器可以处理这个问题。幸运的是,您可以像纯文本RTF一样对待这一点,所有XML标记都有纯ASCII名称。在</p>
<hr/>
<p>几乎同样简单的情况是压缩明文RTF。这是同一件事,但我相信是用zlib压缩的。或者它实际上可以是.zip归档文件中的RTFD(可以是纯文本RTF与图像和其他内容一起放在单独的文件中,或者是实际的纯文本,格式运行存储在一个单独的文件中)。不管怎样,如果您有其中一个,大多数Unix系统上的<code>file</code>命令应该能够将其检测为“compressed RTF”,此时我们可以确定具体的格式并将其解压缩,然后您可以将其编辑为明文RTF(或RTFD)。在</p>
<p>不用说,如果你不先解压这个文件,你就看不到你熟悉的文本,你很容易就把它破坏了,这样它就不能被解压了,或者通过把任意字节改成不同的字节来解压成垃圾。在</p>
<hr/>
<p>最后,难的情况是:二进制RTF。在</p>
<p>最早的版本是以一种未记录的格式,尽管他们已经被逆向工程。后面的版本是公共规范。<a href="http://en.wikipedia.org/wiki/Rich_Text_Format" rel="noreferrer">Wikipedia</a>有指向规范的链接。如果你想手动解析它,你可以,但是这需要大量的代码,你必须自己编写。在</p>
<p>一个更好的解决方案是使用<a href="https://pypi.python.org/pypi?%3Aaction=search&term=rtf&submit=search" rel="noreferrer">one of the many libraries on PyPI</a>,它可以将RTF(包括二进制RTF)转换为其他格式,然后可以轻松地编辑这些格式。在</p>