我正在使用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
时出错问题
如何使用变音符号导航到该文件?
我尝试使用扩展ASCII的UrlEncoding,更改为ASCII编码,但都没有成功。有可能吗?
修改
使用WebUtility.UrlEncode("Ä");
生成%C3%84
为什么?:
答案 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"
(作为示例)?
更多变音符号:
答案 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("Ä");