2009-01-12 26 views
9

Trong một WinApp Tôi chỉ đơn giản là cố gắng để có được những đường dẫn tuyệt đối từ một đối tượng Uri:Uri.AbsolutePath messes lên đường với không gian

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

này hoạt động tốt nếu không có khoảng trống trong đường dẫn ban đầu của tôi. Nếu không gian có trong đó chuỗi bị xáo trộn; ví dụ 'Tài liệu và cài đặt' trở thành 'Tài liệu% 20 và% 20Đặt', v.v.

Bất kỳ trợ giúp nào sẽ được đánh giá cao!

EDIT: LocalPath thay vì AbsolutePath đã thực hiện thủ thuật!

+0

lưu ý để tất cả: đây là một màn hình hiếm hoi của mã hóa vô minh – JohnIdol

Trả lời

9

Nó mã hóa nó như nó phải, bạn có thể có thể UrlDecode nó để làm cho nó trở lại với không gian, nhưng nó không phải là "mangled" nó chỉ được mã hóa chính xác.

Tôi không chắc chắn những gì bạn đang viết, nhưng để chuyển đổi nó trở lại trong asp.net đó là Server.UrlDecode (đường dẫn). Bạn cũng có thể sử dụng LocalPath, thay vì AbsolutePath, nếu đó là một ứng dụng Windows.

+0

nhờ cho câu trả lời của bạn - làm thế nào để Tôi làm điều đó? – JohnIdol

+0

Tôi không chắc chắn những gì bạn đang viết, nhưng trong asp.net đó là Server.UrlDecode (đường dẫn); –

+1

Bạn cũng có thể sử dụng LocalPath, thay vì AbsolutePath, nếu đó là một ứng dụng Windows. –

12

Đây là cách nó được cho là. Đó được gọi là mã hóa URL. Nó được áp dụng vì không gian không được phép trong URL.

Nếu bạn muốn con đường trở lại với không gian bao gồm, bạn phải gọi một cái gì đó như:

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

Bạn không nên được yêu cầu để nhập khẩu bất cứ điều gì để sử dụng điều này trong một ứng dụng web. Nếu bạn gặp lỗi, hãy thử nhập System.Web.HttpServerUtility. Hoặc, bạn có thể gọi nó như vậy:

string path = HttpContext.Current.Server.URLDecode(myUri.AbsolutePath); 
+0

có âm thanh tốt - tôi nên thêm tham chiếu nào để thực hiện điều đó trong một WinApp? – JohnIdol

+0

ngọt ngào - vì vậy tôi cho rằng không có gì tương tự cụ thể với WinApps? – JohnIdol

+0

Cảm ơn câu trả lời - giải pháp tốt nhất trong trường hợp này là sử dụng LocalPath thay vì AbsolutePath vì nó là một winapp và tôi không thích sử dụng Server hoặc HttpContext. – JohnIdol

1

Uri cũng có một vài phương pháp tĩnh - EscapeDataString và EscapeUriString.

Uri.EscapeDataString(uri.AbsolutePath) cũng làm việc

+1

Bạn có thể có nghĩa là Uri.UnescapeDataString – Fortega

3

Chỉ cần sử dụng uri.LocalPath thay

0

Sử dụng HttpUtility:

HttpUtility.UrlDecode(uri.AbsolutePath) 
Các vấn đề liên quan