我的C#WebBrowser控件存在很大问题。 为了让你了解我想要做的事情:
我有一个带有文档部分的应用程序,您可以在其中添加所有类型的文档。还有一个文档搜索,您可以在其中搜索文档。如果您从documentsearchlist中选择一个文档,它会在文档是图像时显示预览。
现在我还要为.pdf文档添加预览。我想用C#WebBrowser控件做到这一点!我做了一些例子,发现了WebBrowser Control的这个“bug”。
错误描述: 我的项目中有一个WebBrowser控件,而我的硬盘上有一个.pdf文件。现在我使用webBrowser.Navigate(“我的pdf文件的路径”)在我的项目中显示.pdf文件。只要路径或文件中没有“变音符号”/特殊字符,这样就可以正常工作!如果路径中有“变音符号”/特殊字符,则WebBrowser控件会抛出路径未找到异常。
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);
但是上面这个例子根本不起作用!只是因为文件名中有“ä”。如果它在paht中也会发生同样的情况。但是,如果我将路径“file:/// C:/täst.pdf”复制到Internet Explorer,它就可以工作。错误消息如下所示: WebBrowser Control Error with path "file:///C:/täst.pdf"
我真的尝试了我能想到的一切,需要你的帮助。请提供一些我可以尝试使其工作的输入。有没有人有同样的问题?
答案 0 :(得分:1)
正如@itsme所提到的,你需要像这样使用HttpUtility.UrlEncode-Methode: (String):
WebBrowser _webBrowser = wbSample;
string test = "file:///C:/täst.pdf";
//_webBrowser.Navigate(test);
_webBrowser.Navigate(HttpUtility.UrlEncode(test));
答案 1 :(得分:0)
所以我得到了一些工作,但我仍然没有达到我的要求:
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"
我想我不允许对路径进行编码。有没有人有这个简单的解决方案?