2009-02-05 14 views
6

Mam adres URL, który wymaga pewnych parametrów. Wartości tych parametrów mogą być znakami akcentowanymi, więc absolutnie potrzebuję UrlEncode je. Co dziwne, widzę różnicę między zachowaniem a Javascriptem i .NET.UrlEncode - Javascript vs. C#

Udawajmy, że próbuję UrlEncode słowo "éléphant". W JavaScript (zgodnie z tym WebSite: http://www.albionresearch.com/misc/urlencode.php) otrzymuję:% E9l% E9phant. Wydaje mi się to poprawne. Jednak w .NET z tym wywołaniem (System.Web.HttpUtility.UrlEncode ("éléphant")) otrzymuję "% c3% a9l% c3% a9phant". Co jest nie tak? czego mi brakuje? Co powinienem zrobić, jeśli chcę uzyskać% E9l% E9phant w .NET?

Dzięki!

+0

W tej chwili miałem dokładnie ten sam problem. Dzięki za pytanie "dla mnie" - dość szybko dostałem się do problemu. –

Odpowiedz

10

System.Web.HttpUtility.UrlEncode będzie używać UTF8 (chyba ..) jako domyślnego kodera, można to zmienić poprzez określenie jednego ..

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.Default); // %e9l%e9phant 

Choć może to być korzystne, aby określić rzeczywisty strona kodowa lub co nie, zamiast polegać na domyślnym systemie operacyjnym.

5

referencyjny:

js:  %E9 l  %E9 phant 
.net: %c3 %a9 l %c3 %a9 phant 

Różnica polega na tym, że jeden jest Kodowanie UTF-8 URL natomiast drugi daje kodowanie ANSI URL.

W .NET, spróbuj:

Dim a As String = System.Web.HttpUtility.UrlEncode(_ 
    "éléphant", _ 
    Text.Encoding.Default) 

uzyskać

%e9 l  %e9 phant 

wyniku. To pasuje do ciągu znaków podanego dla JavaScript, z wyjątkiem przypadku Hex Character.

3

Kodowanie.Default zadziała tylko dla Ciebie, jeśli aktualna strona kodowa twojego systemu jest ustawiona na Europę Zachodnią. Teraz to może być ważne, jeśli Javascript jest również działa na tej samej maszynie co kodera .NET, ale jeśli nie, to można wymusić stronę kodową do zachodnioeuropejskiej jednego:

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252)); 
2

Można także spróbować base64 kodowanie ich.

Istnieje previous post, który zajmuje się robieniem tego w JavaScript.

Jeśli chodzi o .NET, istnieje wiele przykładów pokazujących, jak to zrobić. Oto jeden I found od Google.

Oczywiście ciągi mogą być nieco większe niż kodowanie urną. Będą one jednak zaciemnione, co może być zaletą w zależności od aplikacji.

6

W JavaScript (zgodnie z tym serwisem WWW: http://www.albionresearch.com/misc/urlencode.php) otrzymuję:% E9l% E9phant.

Ta strona jest nieprawidłowa. JavaScript również używa UTF-8, jak to robi domyślnie .NET. Wypróbuj:

javascript:alert(encodeURIComponent('éléphant')) 
%C3%A9l%C3%A9phant 

Obecnie adresy URL to UTF-8. Nie próbuj już używać cp1252. UTF-8 jest twoim przyjacielem. Zaufaj UTF-8!