14

WinApp では、Uri オブジェクトから絶対パスを取得しようとしています。

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

元のパスにスペースがない場合、これは正常に機能します。そこにスペースがあると、文字列が壊れます。たとえば、「Documents and settings」は「Documents%20and%20Setting」などになります。

どんな助けでも大歓迎です!

編集: AbsolutePath の代わりに LocalPath がうまくいきました!

4

5 に答える 5

12

これが本来あるべき姿です。これはURLエンコードと呼ばれます。これは、URLにスペースが許可されていないために適用されます。

スペースを含めてパスを戻す場合は、次のように呼び出す必要があります。

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

Webアプリケーションでこれを使用するために何かをインポートする必要はありません。エラーが発生した場合は、System.Web.HttpServerUtilityをインポートしてみてください。または、次のように呼び出すことができます。

string path = HttpContext.Current.Server.URLDecode(myUri.AbsolutePath);
于 2009-01-12T18:52:30.783 に答える
11

正しくエンコードされているので、おそらくUrlDecodeを使用してスペースを元に戻すことができますが、正しくエンコードされているだけで「マングル」されていません。

何を書いているのかわかりませんが、asp.netに戻すにはServer.UrlDecode(path)です。Windowsアプリの場合は、AbsolutePathではなくLocalPathを使用できる場合もあります。

于 2009-01-12T18:50:50.180 に答える
6

代わりに uri.LocalPath を使用してください

于 2013-07-24T16:17:59.900 に答える
3

Uri には、 EscapeDataStringと EscapeUriStringという 2 つの静的メソッドもあります。

Uri.EscapeDataString(uri.AbsolutePath)も動作します

于 2010-11-08T06:57:37.810 に答える
0

HttpUtility を使用します。

 HttpUtility.UrlDecode(uri.AbsolutePath)
于 2015-10-15T13:53:50.667 に答える