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.LocalPath

У Uri также есть пара статических методов - EscapeDataString и EscapeUriString.

Uri.EscapeDataString(uri.AbsolutePath) также работает

Используйте HttpUtility:

 HttpUtility.UrlDecode(uri.AbsolutePath)
Другие вопросы по тегам