更新: 2008 年 7 月

RTF 格式是 Microsoft 于 20 世纪 80 年代后期开发的一种文件格式,旨在实现不同操作系统之间的文档交换。Microsoft Word 和 WordPad 都可以读写 RTF 文件。在 .NET Framework 中,可以使用 RichTextBox 控件创建支持 RTF 且支持用户以 WYSIWIG 方式将格式应用于文本的字处理器。

也可以使用 RichTextBox 以编程方式将 RTF 格式代码从文档中移除,从而将该文档转换为纯文本。执行这种类型的操作无需在 Windows 窗体中嵌入该控件。

在项目中使用 RichTextBox 控件

  1. 添加对 System.Windows.Forms.dll 的引用。

  2. 为 System.Windows.Forms 命名空间添加 using 指令(可选)。

示例

下面的示例提供一个要转换的示例 RTF 文件。该文件包含 RTF 格式,例如字体信息,还包含四个 Unicode 字符和四个扩展的 ASCII 字符。该文件打开,以 RTF 格式传递到 RichTextBox,作为文本检索,在 MessageBox 中显示并且输出到一个 UTF-8 格式的文件中。

C# 复制代码
    // Save the following RTF file to the same folder as your .exe file, and call it "test.rtf".
    /*
    {\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fnil\fprq1\fcharset0 Courier New;}{\f2\fswiss\fprq2\fcharset0 Arial;}}
{\colortbl ;\red0\green128\blue0;\red0\green0\blue0;}
{\*\generator Msftedit 5.41.21.2508;}\viewkind4\uc1\pard\f0\fs20 This is the \i Greek \i0 word "psyche": \cf1\f1\u968?\u965?\u967?\u942?\cf2\f2 . It is encoded in Unicode.\par
Here are four extended \b ASCII \b0 characters (Windows code page 1252):  \'e2\'e4\u1233?\'e5\cf0\par
}
     */
    class ConvertFromRTF
    {
        static void Main()
        {

            string path = @"test2.rtf";

            //Create the RichTextBox. (Requires a reference to System.Windows.Forms.dll.)
            System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox();

            // Get the contents of the RTF file. Note that when it is
            // stored in the string, it is encoded as UTF-16.
            string s = System.IO.File.ReadAllText(path);

            // Display the RTF text.
            System.Windows.Forms.MessageBox.Show(s);

            // Convert the RTF to plain text.
            rtBox.Rtf = s;
            string plainText = rtBox.Text;

            // Display plain text output in MessageBox because console
            // cannot display Greek letters.
            System.Windows.Forms.MessageBox.Show(plainText);

            // Output plain text to file, encoded as UTF-8.
            System.IO.File.WriteAllText(@"output.txt", plainText);
        }
    }

RTF 字符以八位编码。但此格式除了允许用户从指定代码页扩展 ASCII 字符外,还允许用户指定 Unicode 字符。由于 RichTextBox..::.Text 属性为 string 类型,因此字符按 Unicode UTF-16 进行编码。源 RTF 文档中的所有扩展的 ASCII 字符和 Unicode 字符都在文本输出中进行了正确的编码。

如果使用 File..::.WriteAllText 方法将文本写入磁盘,则文本将按 UTF-8(没有字节顺序标记)进行编码。

请参见

参考

System.Windows.Forms..::.RichTextBox

修订记录

日期

历史记录

原因

2008 年 7 月

新增主题。

内容 Bug 修复