使用wpf webbrowser控件导航到使用变音符号的uri

时间:2016-08-26 12:31:58

标签: c# wpf webbrowser-control

我正在使用WPF WebBrowser控件导航到包含PDF文件的URI:

XAML

<WebBrowser x:Name="Browser" Loaded="Browser_OnLoaded"/>

代码

        url = @"file:///c:\A.pdf"; // This works
        url = @"file:///c:\Ä.pdf"; // This shows error

        Browser.Navigate(url);

Ä.pdf

时出错

enter image description here

问题

如何使用变音符号导航到该文件?

我尝试使用扩展ASCII的UrlEncoding,更改为ASCII编码,但都没有成功。有可能吗?

修改

使用WebUtility.UrlEncode("Ä");生成%C3%84为什么?:

enter image description here

3 个答案:

答案 0 :(得分:2)

我认为这里的解决方案不是尝试花哨的编码,而是使用Uri类。

这适用于WPF WebBrowser控件:

var uri = new Uri("c:\users\täto\AppData\Roaming\MarkdownMonster\_preview.html");
PreviewBrowser.Navigate(uri);

看来Uri类处理所有的编码没有大惊小怪。

答案 1 :(得分:1)

您是否尝试过:@"file:///c:\Certific%E4te.pdf"而不是@"file:///c:\Certificäte.pdf"(作为示例)?

更多变音符号:

  • Ä=%C4
  • Ö=%D6
  • Ü=%DC
  • ä=%E4
  • ö=%F6
  • ü=%FC
  • ß=%DF
  • €=%u20AC
  • $ =%24
  • %=%25

答案 2 :(得分:1)

要使其与WebBrowser一起使用,您必须更新编码。通过引用System.Web程序集,您可以使用:

  System.Web.HttpUtility.UrlEncode("Ä", Encoding.GetEncoding("ISO-8859-1")));

对于以下示例,我使用了字符Ä

所有非ASCII字符必须使用百分比编码字符在URL中进行编码。它在以下RFC(第21页,第3.2.2节的最后一段)中进行了解释:here

必须首先根据UTF-8 [STD63]对非ASCII字符进行编码,然后必须对相应UTF-8序列的每个八位字节进行百分比编码,以表示为URI字符。

因此,与Ä对应的UTF8字符为C3 84。这对应于百分比编码值:%C3%84

您可以使用以下代码对文件名进行编码:

System.Net.WebUtility.UrlEncode("Ä");

Uri.EscapeUriString("Ä");