RichTextBox 从文本中删除转义字符

RichTextBox removes escape character from the text

在 RichTextBox 中将文本添加到 RTF 属性 之前,我对文本进行了一些处理,添加转义字符,然后将数据分成多行。

正文是

line1 \n\u001aline2 \n\u001aline3 \n\u001aline4

当我将 VS 2015 与 .Net 4.6.2 一起使用时 RTF 属性 中的值是

{\rtf1\fbidis\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 
Arial;}}\r\n\viewkind4\uc1\pard\ltrpar\lang3073\fs24 Line1 
\par\r\n\v\'1a\v0 Line2
\par\r\n\v\'1a\v0 Line3
\par\r\n\v\'1a\v0 Line4\par\r\n}\r\n

但是当我使用 .Net 4.7.1 切换到 VS 2017 时 值更改为

{\rtf1\fbidis\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0
Arial;}}\r\n{\*\generator Riched20 10.0.16299}\viewkind4\uc1
\r\n\pard\ltrpar\fs24\lang1033 Line1
\par\r\n\v\'1a\v0 Line2 \par\r\n\v\'1a\v0
Line3 \par\r\n\r\n\pard\ltrpar\v\'1a\v0
Line4\par\r\n}\r\n

当我访问文本时 属性 我得到了这个文本

Line1 \nLine2 \nLine3 \nLine4

RichTextBox 删除了 VS 2017 中的转义字符,有人知道为什么吗?

当您的应用程序以 .NET 4.6.2(或更低版本)为目标时,RichTextBox 实例化 RichEdit 控件版本 3(版本描述 here),当您的应用程序重定向到 .NET 4.7.1 时,它实例化 Rich编辑版本 4.1 (msftedit.dll)。 RTF 表示形式的差异很可能是由较新版本的控件引起的。即使您的应用程序以 4.7 及更高版本为目标,您也可以通过在 AppContextSwitchOverrides 标记下添加具有以下兼容性开关的 app.config 文件来选择不使用较新版本的 Rich Edit:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <AppContextSwitchOverrides
      value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=true" />
  </runtime>
</configuration>

相反,您可以通过将上述 AppContextSwitch 设置为 false,在面向 .NET 4.6.2 的应用程序中加载 Rich Edit 4.1。