更新: 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 修复