Ури.AbsolutePath путает путь с пробелами
в WinApp я просто пытаюсь получить абсолютный путь от объекта Uri:
Uri myUri = new Uri(myPath); //myPath is a string
//somewhere else in the code
string path = myUri.AbsolutePath;
это отлично работает, если в моем исходном пути нет пробелов. Если пробелы есть, строка искажается; например, "документы и настройки"становится" документы%20 и%20Setting " и т. д.
любая помощь будет оценили!
EDIT: LocalPath вместо AbsolutePath сделал трюк!
5 ответов
он кодирует его так, как должен, вы могли бы, вероятно, UrlDecode его, чтобы вернуть его с пробелами, но он не "искалечен", он просто правильно закодирован.
Я не уверен, что вы пишете, но конвертировать его обратно в asp.net это сервер.UrlDecode(путь). Вы также можете использовать LocalPath, а не AbsolutePath, если это приложение для Windows.
так и должно быть. Это называется кодировкой URL. Это применимо, потому что пробелы в URL-адресах запрещены.
Если вы хотите вернуть путь с включенными пробелами, вы должны вызвать что-то вроде:
string path = Server.URLDecode(myUri.AbsolutePath);
вам не нужно ничего импортировать, чтобы использовать это в веб-приложении. Если вы получаете ошибку, попробуйте импортировать систему.Сеть.HttpServerUtility. Или, вы можете назвать это так:
string path = HttpContext.Current.Server.URLDecode(myUri.AbsolutePath);
Uri также имеет несколько статических методов -EscapeDataString и EscapeUriString.
Uri.EscapeDataString(uri.AbsolutePath)
работает