如何在 WPF 中呈现与在 Winforms 中相同的 HTML 中的特殊字符?
How do I render special characters in HTML the same in WPF as in Winforms?
我正在开发一个电子邮件通知项目,在这个项目中,客户可以在预先存在的 Winforms 屏幕中编辑电子邮件模板 - 添加 html、文本等。非常简单 示例输入:
<!DOCTYPE html>
<html>
<head>
<title>The Title</title>
</head>
<body bgcolor="#f2f2f2" style="margin: 0; padding: 0;">
<br />
<b>Please do not respond to this e-mail, as it is not monitored.</b>
<br/>
<br/>
“Foo bar baz.
<br/>
<br/>
Baz bar foo.”
<br/>
</body>
</html>
这被保存为 string
。在同一屏幕上,用户然后可以单击一个按钮,该按钮将引发对另一个表单的 ShowDialog
调用。此表单在 WebBrowser
控件中预览用户的 html:
this.webBrowser.DocumentText = theHtmlString;
结果:
问题:
我正在创建与提到的 Winforms 屏幕相关的 WPF 屏幕。它也需要能够预览用户的 html。为此,我使用了从 this version 修改而来的附加行为。本质上,此对话框还在 WebBrowser
控件中预览用户的 html:
webBrowser.NavigateToString(theHtmlString);
但是,结果不正确,如下所示:
如果这是我自己的 html 输入,我会简单地删除有问题的字符并用标准引号替换它们。但是由于此输入来自客户端,如何让 WPF 呈现与 Winforms 相同的效果?
造成问题的原因:
- 在旧的 Winforms 屏幕中,用户 creates/edits-existing 电子邮件模板,预览它们,对呈现的示例感到满意,保存更改。
- 在新的 WPF 屏幕中,用户 exports/imports 现有的电子邮件模板,预览它们,对呈现的示例和奇怪的字符不满意,当其他屏幕仍然正确呈现时变得困惑 - 调用报告 "bug" 在新屏幕中。
简单复制示例:-归功于Eser
var encoded = WebUtility.HtmlEncode(" “ Test ” "); //" “ Test ” "
var buf = Encoding.UTF8.GetBytes(" “ Test ” ");
var str = Encoding.GetEncoding("Windows-1252").GetString(buf); //" “ Test †"
只需将此 meta
标签添加到您的 HTML:
的 <head>
<meta charset='utf-8'>
这将正确显示特殊字符。我刚刚用这个测试了你的确切代码并且它有效。
我正在开发一个电子邮件通知项目,在这个项目中,客户可以在预先存在的 Winforms 屏幕中编辑电子邮件模板 - 添加 html、文本等。非常简单 示例输入:
<!DOCTYPE html>
<html>
<head>
<title>The Title</title>
</head>
<body bgcolor="#f2f2f2" style="margin: 0; padding: 0;">
<br />
<b>Please do not respond to this e-mail, as it is not monitored.</b>
<br/>
<br/>
“Foo bar baz.
<br/>
<br/>
Baz bar foo.”
<br/>
</body>
</html>
这被保存为 string
。在同一屏幕上,用户然后可以单击一个按钮,该按钮将引发对另一个表单的 ShowDialog
调用。此表单在 WebBrowser
控件中预览用户的 html:
this.webBrowser.DocumentText = theHtmlString;
结果:
问题:
我正在创建与提到的 Winforms 屏幕相关的 WPF 屏幕。它也需要能够预览用户的 html。为此,我使用了从 this version 修改而来的附加行为。本质上,此对话框还在 WebBrowser
控件中预览用户的 html:
webBrowser.NavigateToString(theHtmlString);
但是,结果不正确,如下所示:
如果这是我自己的 html 输入,我会简单地删除有问题的字符并用标准引号替换它们。但是由于此输入来自客户端,如何让 WPF 呈现与 Winforms 相同的效果?
造成问题的原因:
- 在旧的 Winforms 屏幕中,用户 creates/edits-existing 电子邮件模板,预览它们,对呈现的示例感到满意,保存更改。
- 在新的 WPF 屏幕中,用户 exports/imports 现有的电子邮件模板,预览它们,对呈现的示例和奇怪的字符不满意,当其他屏幕仍然正确呈现时变得困惑 - 调用报告 "bug" 在新屏幕中。
简单复制示例:-归功于Eser
var encoded = WebUtility.HtmlEncode(" “ Test ” "); //" “ Test ” "
var buf = Encoding.UTF8.GetBytes(" “ Test ” ");
var str = Encoding.GetEncoding("Windows-1252").GetString(buf); //" “ Test †"
只需将此 meta
标签添加到您的 HTML:
<head>
<meta charset='utf-8'>
这将正确显示特殊字符。我刚刚用这个测试了你的确切代码并且它有效。