2012-10-15 68 views
7

Làm thế nào để giải mã một chuỗi như sau: xmlnsdecode trăm mã hóa chuỗi C# .net

name1 = ABC & userId = DEF & name2 = ZYX & tải trọng =% 3cSTAT +% 3axsi% 3d% 22http% 3a% 2f% 2fwww.w3.org% 2f2001% 2fXMLSchema-instance% 22% 3e% 3cREQ ...

Bối cảnh: Tôi chấp nhận một HTTP POST (cặp giá trị tên, về cơ bản) sau đó chuyển đổi mảng byte thành chuỗi có:

Encoding.UTF8.GetString(response, 0, response.Length); 

Tôi đã thử HtmlD phương pháp ecode của WebUtility và HttpUtility nhưng xuất hiện để có được cùng một chuỗi trở lại.

Trả lời

17

này nên làm công việc cho bạn:

System.Uri.UnescapeDataString(str) 
+0

Cảm ơn tất cả. Cả hai câu trả lời đều đưa tôi đến nơi tôi cần phải đi! Có ưu điểm/khuyết điểm cụ thể nào của phương pháp Uri so với phương pháp HttpUtility không? –

+0

Uri sẽ cho phép bạn loại trừ System.Web khỏi tài liệu tham khảo của bạn nếu bạn không cần nó. –

+1

@JohnSpiegel: Có sự khác biệt nhỏ, hãy xem câu trả lời đã chỉnh sửa của tôi. –

8

Bạn đã thử HttpUtility.UrlDecode chưa?

Xem here.

Lưu ý rằng chức năng này không hoạt động tương tự như HttpUtility.HtmlDecode.

Chỉnh sửa: Trong câu trả lời cho câu hỏi về sự khác biệt giữa UrlDecodeUnescapeDataString:

Để trích dẫn MSDN page trên UnescapeDataString:

Nhiều trình duyệt Web thoát khỏi không gian bên trong của URI vào dấu cộng ("+") nhân vật; tuy nhiên, phương thức UnescapeDataString không chuyển đổi các ký tự cộng vào không gian vì hành vi này không phải là tiêu chuẩn trên tất cả các lược đồ URI.

UrlDecode không xử lý những tuy nhiên, bạn sẽ có được phản ứng khác nhau nếu bạn thử như sau:

string a = Uri.UnescapeDataString(".Net+Framework"); //returns ".Net+Framework" 
string b = HttpUtility.UrlDecode(".Net+Framework"); //returns ".Net Framework" 

Do đó nó sẽ có vẻ rằng, đối với vùng phủ sóng tốt hơn, HttpUtility.UrlDecode là lựa chọn tốt hơn.

2
var result = System.Web.HttpUtility.UrlDecode("name1=ABC&userId=DEF&name2=zyx&payload=%3cSTAT+xmlns%3axsi%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema-instance%22%3e%3cREQ..."); 

cho

name1=ABC&userId=DEF&name2=zyx&payload=<STAT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><REQ... 

và tôi hy vọng đó là những gì bạn muốn.