WPF WebBrowser和德语中的“umlaut”等特殊字符问题

3

我在我的应用程序中使用 WPF WebBrowser 控件。我有一个包含德语 Umlaute (ä ö ü) 的文件(mht)。现在,我使用.Navigate(path)加载此文件,但问题是这些字符显示不正确。我该如何解决?

最好的问候,Thomas

4个回答

8

这很古怪。

  1. My solution was to put an explicit meta tag in my HTML file - "My Page.html"

    <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>
    
  2. Then using the standard Web Browser .NET control I then created a URI object first.

    webBrowser1.Url = new Uri("My Page.html");
    
  3. Then draw the page using the refresh method.

    webBrowser1.Refresh();
    
请注意,如果您直接使用Navigate方法,则无法捕获utf-8指令,但URI和刷新方法可以实现。
有点奇怪,但它能够起作用。

1
欢迎来到SO Gavin。与其试图为<>添加漂亮的渲染效果,不如添加4个空格以突出代码或将它们放在“.”之间。 - j0k
第二项解决了我的问题(即在URL路径中有特殊字符,我的URL是本地文件),我之前将一个字符串传递给Navigate,现在改为传递一个URL就可以了。 - Harps

2

今早我遇到了这个问题,非常烦人,直到我找到了以下解决方案:

Stream stream = new MemoryStream(System.Text.Encoding.Default.GetBytes(Content_Of_HTML_File_In_String)));
webBrowser.NavigateToStream(stream);

与上述解决方案相比,您不会遇到任何“COMException”或类似的问题。

2

以下是我解决问题的方法:

    static void webBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) {
        var webBrowser = sender as WebBrowser;
        if(webBrowser == null) {
            return;
        }
        var doc = (IHTMLDocument2)webBrowser.Document;           

        doc.charset = "utf-8";
        webBrowser.Refresh();
    }

IHTMLDocument2在哪里? - Alberto Torre
@AlbertoTorre 这是一个内部接口,位于这里:MS.Win32.UnsafeNativeMethods.IHTMLDocument2。我不确定如何在没有编译错误的情况下访问此接口 :) - Siewers

0

WebBrowser控件在内部使用Internet Explorer,无论您的本地PC上安装哪个版本。如果您可以在IE中解决问题,则应该在WebBrowser控件中解决。


好的。我发现我可以在IE中更改编码。当我加载我的文件并将编码更改为UTF-8时,一切都显示完美。但是我找不到在WebBrowser控件中更改编码的地方。你能帮我吗? - BennoDual
1
在您的网页中,您可以尝试使用以下格式设置编码(字符集):<META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> - Jon Onstott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接