使用 wpf webbrowser 控件导航到带有变音符号的 uri
Navigate to uri with umlaut using 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 出错
问题
如何使用变音符号导航到文件?
我尝试了 UrlEncoding,更改为 ASCII 编码,使用扩展的 ASCII 都没有成功。可能吗?
编辑
使用 WebUtility.UrlEncode("Ä");
产生 %C3%84
为什么?:
您是否尝试过:@"file:///c:\Certific%E4te.pdf"
而不是 @"file:///c:\Certificäte.pdf"
(作为示例)?
更多变音符号:
- Ä = %C4
- Ö = %D6
- Ü = %DC
- ä = %E4
- ö = %F6
- ü = %FC
- ß = %DF
- € = %u20AC
- $ = %24
- % = %25
要使其与 WebBrowser 一起使用,您必须更新编码。通过引用 System.Web 程序集,您可以使用:
System.Web.HttpUtility.UrlEncode("Ä", Encoding.GetEncoding("ISO-8859-1")));
对于下面的示例,我使用了字符 Ä
。
所有非 ASCII 字符都必须使用百分号编码字符在 URL 中编码。它在以下 RFC(第 21 页,第 3.2.2 节的最后一段)中进行了解释:https://www.rfc-editor.org/rfc/rfc3986.
非ASCII字符必须首先根据UTF-8 [STD63]进行编码,然后相应的UTF-8序列的每个八位字节必须进行百分比编码才能表示为URI字符。
所以Ä
对应的UTF8字符就是C3 84
。对应于百分比编码值:%C3%84
.
您可以使用以下代码对您的文件名进行编码:
System.Net.WebUtility.UrlEncode("Ä");
或
Uri.EscapeUriString("Ä");
我认为这里的解决方案不是尝试花哨的编码,而是使用 Uri
class.
这在 WPF WebBrowser 控件中对我有用:
var uri = new Uri("c:\users\täto\AppData\Roaming\MarkdownMonster\_preview.html");
PreviewBrowser.Navigate(uri);
Uri class 似乎可以毫不费力地处理所有编码。
我正在使用 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 出错
问题
如何使用变音符号导航到文件?
我尝试了 UrlEncoding,更改为 ASCII 编码,使用扩展的 ASCII 都没有成功。可能吗?
编辑
使用 WebUtility.UrlEncode("Ä");
产生 %C3%84
为什么?:
您是否尝试过:@"file:///c:\Certific%E4te.pdf"
而不是 @"file:///c:\Certificäte.pdf"
(作为示例)?
更多变音符号:
- Ä = %C4
- Ö = %D6
- Ü = %DC
- ä = %E4
- ö = %F6
- ü = %FC
- ß = %DF
- € = %u20AC
- $ = %24
- % = %25
要使其与 WebBrowser 一起使用,您必须更新编码。通过引用 System.Web 程序集,您可以使用:
System.Web.HttpUtility.UrlEncode("Ä", Encoding.GetEncoding("ISO-8859-1")));
对于下面的示例,我使用了字符 Ä
。
所有非 ASCII 字符都必须使用百分号编码字符在 URL 中编码。它在以下 RFC(第 21 页,第 3.2.2 节的最后一段)中进行了解释:https://www.rfc-editor.org/rfc/rfc3986.
非ASCII字符必须首先根据UTF-8 [STD63]进行编码,然后相应的UTF-8序列的每个八位字节必须进行百分比编码才能表示为URI字符。
所以Ä
对应的UTF8字符就是C3 84
。对应于百分比编码值:%C3%84
.
您可以使用以下代码对您的文件名进行编码:
System.Net.WebUtility.UrlEncode("Ä");
或
Uri.EscapeUriString("Ä");
我认为这里的解决方案不是尝试花哨的编码,而是使用 Uri
class.
这在 WPF WebBrowser 控件中对我有用:
var uri = new Uri("c:\users\täto\AppData\Roaming\MarkdownMonster\_preview.html");
PreviewBrowser.Navigate(uri);
Uri class 似乎可以毫不费力地处理所有编码。