Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uri.AbsolutePath messes up path with spaces

In a WinApp I am simply trying to get the absolute path from a Uri object:

Uri myUri = new Uri(myPath); //myPath is a string
//somewhere else in the code
string path = myUri.AbsolutePath;

This works fine if no spaces in my original path. If spaces are in there the string gets mangled; for example 'Documents and settings' becomes 'Documents%20and%20Setting' etc.

Any help would be appreciated!

EDIT: LocalPath instead of AbsolutePath did the trick!

like image 801
JohnIdol Avatar asked Jan 12 '09 18:01

JohnIdol


4 Answers

This is the way it's supposed to be. That's called URL encoding. It applies because spaces are not allowed in URLs.

If you want the path back with spaces included, you must call something like:

string path = Server.URLDecode(myUri.AbsolutePath);

You shouldn't be required to import anything to use this in a web application. If you get an error, try importing System.Web.HttpServerUtility. Or, you can call it like so:

string path = HttpContext.Current.Server.URLDecode(myUri.AbsolutePath);
like image 147
EndangeredMassa Avatar answered Nov 08 '22 08:11

EndangeredMassa


It's encoding it as it should, you could probably UrlDecode it to get it back with spaces, but it's not "mangled" it's just correctly encoded.

I'm not sure what you're writing, but to convert it back in asp.net it's Server.UrlDecode(path). You also might be able to use LocalPath, rather than AbsolutePath, if it's a Windows app.

like image 34
Steven Robbins Avatar answered Nov 08 '22 07:11

Steven Robbins


Just use uri.LocalPath instead

like image 36
Andreas Avatar answered Nov 08 '22 06:11

Andreas


Uri also has a couple of static methods - EscapeDataString and EscapeUriString.

Uri.EscapeDataString(uri.AbsolutePath) also works

like image 40
Gishu Avatar answered Nov 08 '22 08:11

Gishu