【发布时间】:2021-01-15 13:19:33
【问题描述】:
NET Core 版本:3.1.405 Windows 版本:Windows 10
RichTextBox 无法从我的 WPF 应用程序中的 rtf 字符串转换非 ascii 字符。
string rtf ="{\\rtf1\\ansi\\ansicpg1252\\uc1\\htmautsp\\deff2{\\fonttbl{\\f0\\fcharset0 Times New Roman;}{\\f2\\fcharset0 Arial;}} {\\colortbl\\red0\\green0\\blue0;\\red255\\green255\\blue255;}\\loch\\hich\\dbch\\pard\\plain\\ltrpar\\itap0{\\lang32\\fs30\\f2\\cf0 \\cf0\\qj\\sl15\\slmult0{\\f2 {\\ltrch entête}\\li0\\ri0\\sa0\\sb0\\fi0\\qj\\sl15\\slmult0\\par}}}"
if (rtf.Length > 2)
{
FlowDocument flowDocument = new FlowDocument
{
LineHeight = 1,
Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentUICulture.Name),
};
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(rtf)))
{
TextRange text = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
if (stream.Length != 0)
{
text.Load(stream, DataFormats.Rtf);
}
text.ClearAllProperties();
}
return flowDocument;
}
实际行为:我的 RichTextbox 显示“Entête”。 “ê”(非 ASCII 字符)的转换问题
预期行为:我的 RichTextbox 显示“Entête”。 “ê”的转换问题
【问题讨论】:
-
我似乎您的 RTF 字符串不符合标准的 RTF。如果你用这个
{\ltrch Ent\'eate}替换{\ltrch entête}片段,非Unicode 字符将正确显示。非 ASCII 字符必须转义! -
它适用于 .NetFramework 4.6.1
-
只是出于兴趣,我将您的代码放入 .NET Framework 4.6.1 中,因为它正在显示 entête。因此,您应该检查您的 RTF 字符串是如何从原始源创建的过程。
标签: c# wpf .net-core richtextbox