2016-10-25 6 views
1

У меня есть большая проблема с C# WebBrowser Control. Чтобы узнать, что я пытаюсь сделать:C# WebBrowser Control не может обрабатывать «Umlaute»/специальные символы, такие как üäö в пути

У меня есть приложение с разделом документа, в котором вы можете добавить все типы документов. Также есть документы, в которых вы можете искать документы. Если вы выберете документ из списка поиска документов, он отобразит предварительный просмотр, если документ является изображением.

Теперь я также хочу добавить предварительный просмотр документов .pdf. Я хочу сделать это с помощью C# WebBrowser Control! Я привел несколько примеров и обнаружил эту «ошибку» элемента управления WebBrowser.

Описание ошибки: У меня есть элемент управления WebBrowser в моем проекте и файл .pdf на моем жестком диске. Теперь я использую webBrowser.Navigate («путь к файлу PDF») для отображения файла .pdf в моем проекте. Это прекрасно работает, пока в пути или файле нет «Umlaut»/специального символа! Если в пути есть символ «Umlaut»/special, элемент управления 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, он будет работать. Сообщение об ошибке выглядит как th is: WebBrowser Control Error with path "file:///C:/täst.pdf"

Я действительно пробовал все, что я могу придумать, и вам нужна ваша помощь. Просьба дать некоторые материалы о том, что я могу попытаться заставить его работать. И есть ли у кого-то такая же проблема?

+1

Чтобы сделать его действительным, вам необходимо [закодировать] (https://www.google.com/search?q=c%23+url+encode&ie=utf-8&oe=utf-8) URL. – itsme86

ответ

1

Как @itsme упоминалось, вам нужно использовать HttpUtility.UrlEncode-Methode: (String) так:

WebBrowser _webBrowser = wbSample; 
string test = "file:///C:/täst.pdf"; 
//_webBrowser.Navigate(test); 
_webBrowser.Navigate(HttpUtility.UrlEncode(test)); 
+0

Привет, сначала спасибо за ваш ответ!Как я сказал, я пробовал несколько методов кодирования, и никто из них не работает ... По какой-то причине я не могу использовать HttpUtility, о которой вы упоминали, поэтому я попробовал ее с помощью WebUtility.HtmlEncode, но это дало следующую ошибку: «file: /// C:/t ä st.pdf "не найден – user2738829

+0

@ user2738829 Вам не нужен HtmlEncode, вы хотите UrlEncode. Они разные методы кодирования. – itsme86

+0

Спасибо, теперь мне удалось обратиться к System.Web.dll. Теперь я использую код выше, но метод webBrowser.Navigate выдает исключение «Недействительный URI, формат URI не может быть определен» ... – user2738829

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» и корректно отображается веб-браузером! До сих пор так хорошо;)

Проблема заключается в том, когда BasePath также содержит специальные символы, как в этом примере кода:

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); 

Это один дает мне Ури исключение формат, и кодированный имя файла выглядит следующим образом : "file% 3a% 2f% 2f% 2fC% 3a% 2ff% f6lder% 2ft% e4st.pdf"

Я думаю, что мне не разрешено кодировать/пути. У кого-то есть простое решение для этого?