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