c# WebBrowser控件不能处理'/特殊字符,如üäö在路径
本文关键字:#252 #228 路径 #246 控件 WebBrowser 不能 处理 特殊字符 | 更新日期: 2023-09-27 18:14:47
我对c# WebBrowser控件有一个很大的问题。让你看看我在做什么:
我有一个带有文档部分的应用程序,您可以在其中添加所有类型的文档。还有一个documentsearch,你可以在其中搜索文档。如果您从documentsearchlist中选择一个文档,如果该文档是图像,则显示预览。
现在我还想为.pdf文档添加预览。我想用c# WebBrowser控件做到这一点!我做了一些例子,发现了WebBrowser控件的这个"bug"。
bug描述:我有一个web浏览器控件在我的项目和一个。pdf文件在我的硬盘上。现在我用webBrowser。导航("我的pdf文件的路径")在我的项目中显示。pdf文件。只要路径或文件中没有"Umlaut"/特殊字符,这就可以正常工作!如果路径中有"Umlaut"/特殊字符,则WebBrowser Control抛出路径未找到异常。
WebBrowser控件以某种方式将我的文件路径转换为不工作的路径。我试着转换,编码,解码等等…我的文件路径多次使用几个方法,但我总是以这个错误结束:(
下面是一些示例代码:WebBrowser _webBrowser = wbSample;
string test = "file:///C:/test.pdf";
_webBrowser.Navigate(test);
上面的例子工作得很好!如你所料!
WebBrowser _webBrowser = wbSample;
string test = "file:///C:/täst.pdf";
_webBrowser.Navigate(test);
但是上面的例子根本不起作用!仅仅因为文件名中有一个"ä"。如果它在路径中,也会发生同样的情况。但是如果我复制路径"file:///C:/täst.pdf"到ie浏览器,它就可以工作了。错误信息看起来像这样:WebBrowser控制错误,路径"file:///C:/täst.pdf"
我真的试过我能想到的一切,需要你的帮助。请给一些输入,我可以试着让它工作。有人遇到过同样的问题吗?正如@itsme提到的,您需要使用HttpUtility。urlencode - method: (String)像这样:
WebBrowser _webBrowser = wbSample;
string test = "file:///C:/täst.pdf";
//_webBrowser.Navigate(test);
_webBrowser.Navigate(HttpUtility.UrlEncode(test));
所以我得到了一些工作,但我仍然没有完成我的要求:
WebBrowser _webBrowser = wbSample;
string filename = "täst.pdf";
string basepath = "file:///C:/";
string encodedfilename= HttpUtility.UrlEncode(filename, Encoding.GetEncoding("ISO-8859-1"));
string uri= basepath + encodedfilename;
_webBrowser.Navigate(uri);
所以在编码+字符串操作之后,uri看起来像这样:"file:///C:/t%e4st.pdf"并且被webBrowser正确显示!到目前为止一切顺利;)
问题是,当基本路径还包含特殊字符时,如以下代码示例所示:WebBrowser _webBrowser = wbSample;
string filename = "file:///C:/földer/täst.pdf";
string encodedfilename = HttpUtility.UrlEncode(filename, Encoding.GetEncoding("ISO-8859-1"));
_webBrowser.Navigate(encodedfilename);
这个给了我一个uri格式异常,编码后的文件名看起来像这样:"file%3a%2f%2f%2fC%3a%2ff%f6lder%2ft%e4st.pdf"
我认为不允许对路径的/进行编码。有人有简单的解决办法吗?