2012-10-15 9 views
7

Jak dekodowania ciąg tak:dekodowania procent zakodowany ciąg C# NET

Nazwa1 = ABC & userId = DEF & name2 = ZYX & ładunek =% 3cSTAT + xmlns% 3axsi% 3D% 22http% 3a% 2f% 2fwww.w3.org% 2f2001% 2fXMLSchema -instancja% 22% 3e% 3cREQ ...

Tło: akceptuję HTTP POST (w zasadzie pary wartości nazw), a następnie konwersję tablicy bajtów na ciąg znaków z:

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

Próbowałem HtmlD Metoda ecode WebUtility i HttpUtility, ale wydają się odzyskiwać ten sam ciąg.

Odpowiedz

17

ten powinien wykonać zadanie dla Ciebie:

System.Uri.UnescapeDataString(str) 
+0

Dziękuję wszystkim. Obie odpowiedzi prowadzą mnie tam, gdzie muszę iść! Czy istnieją szczególne zalety/wady metody Uri w porównaniu z metodą HttpUtility? –

+0

Uri pozwoli ci wykluczyć System.Web z twoich referencji, jeśli nie będziesz tego potrzebować w inny sposób. –

+1

@JohnSpiegel: Tak, istnieje subtelna różnica, zobacz moją zredagowaną odpowiedź. –

8

Czy próbowałeś już HttpUtility.UrlDecode?

Zobacz here.

Należy zauważyć, że ta funkcja nie działa tak samo jak HttpUtility.HtmlDecode.

Edycja: W odpowiedzi na pytanie o różnice między UrlDecode i UnescapeDataString:

zacytować MSDN page na UnescapeDataString:

Wiele przeglądarek internetowych uciec przestrzenie wewnątrz URI na plus ("+") postacie; jednak metoda UnescapeDataString nie konwertuje znaków plus na spacje, ponieważ to zachowanie nie jest standardem we wszystkich schematach URI.

UrlDecode ma obsługiwać te jednak można dostać różne reakcje, jeśli spróbuj wykonać następujące czynności:

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

Dlatego wydaje się, że dla lepszego pokrycia, HttpUtility.UrlDecode jest lepszym rozwiązaniem.

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..."); 

daje

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

i spodziewam się, że to, co chcesz.

Powiązane problemy