Gå til innhold

Sende ÆØÅ med WebClient.QueryString? Hvordan?


Anbefalte innlegg

Har et lite problem...

 

Bruker Webclient til å sende en spørring til en URL.

 

La oss si:

 

WebClient client = new WebClient();
client.QueryString.Add("arg", "æøå");

string url = "http://hw.no/fil";

client.OpenRead(url);

 

Resultat: "æøå"

 

Årsak: "æøå" må "Url-enkodes": %E6%F8%E5

Men det er det som er problemet: hvis jeg endrer til:

client.QueryString.Add("arg", "%E6%F8%E5");

blir resultatet ""%E6%F8%E5" - tydeligvis så blir det gjort en form for urlenkoding i QueryString automatisk!

 

Dersom jeg derimot dropper å bruke QueryString.add, og heller setter det rett i URL'en fungerer det:

url = "http://hw.no/fil?arg=%E6%F8%E5"

 

Noen som kan forklare meg hvordan jeg kan oppnå samme resultat ved hjelp av QueryString.Add?

Lenke til kommentar
Videoannonse
Annonse
client.QueryString.Add("arg", UrlEncode("æøå"));

Burde vel gjøre nytten?

System.Web.HttpUtility namespace trenger du vel også

6899467[/snapback]

 

Det er det samme som: client.QueryString.Add("arg", "%E6%F8%E5");

 

Og ja, all logikk skulle tilsi at det skulle fungere, men av en eller annen grunn mottar serveren det nøyaktig slik da: %E6%F8%E5

 

Jeg mistenker derfor at QueryString automatisk urlenkoder, slik at når den får inn %E6%F8%E5, så oppdager den %-tegnet og bytter det ut med en url-versjon av det...

 

Videre burde det da vært logisk at den også automatisk encoder "æøå" men det gjør den altså ikke...

Lenke til kommentar

Har du prøvd:

WebClient client = new WebClient();
client.Encoding = System.Text.Encoding.Default;
client.QueryString.Add("arg", "æøå");

string url = "http://hw.no/fil";

client.OpenRead(url);

 

Vil tro den slenger inn rett encoding istedet for UTF-8 (unicode?) som er default encoding i .Net virker det som.

 

Samme problemstilling får man med skriving til fil ut fra en streng med .Net sine standardmetoder som ikke tar i mot Encoding.

 

Dersom det er du som lager websiden som tar i mot URLen så kan du også decode strengen selv:

 

            string unormal = "æøå";
           byte[] b = System.Text.Encoding.Default.GetBytes(unormal);
           byte[] b2= System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.Default, b);
           string normal = System.Text.Encoding.Default.GetString(b2);

 

som gir normal = "æøå"

 

Ser også at Google også kan lese unicode. Skriv inn æøå i søket på google så ser du.

Endret av wolf5
Lenke til kommentar

Har prøvd å sette client.Encoding - men det ugjør ingen forskjell. Min konklusjon er at det ikke berører det som er i Querystring - men kun opplasting av filer eller slike ting. For som sagt fungerer det hvis jeg IKKE bruker QueryString metoden til å bygge url'en.

 

Men jeg har vel egentlig gitt opp hele greien nå, og putter det heller rett inn i URL'en uten bruk av QueryString. Det fungerer som sagt uproblematisk (ved bruk av UrlEncode() på strengen)

 

Jeg har ikke kontroll over scriptet som tar i mot strengen :(

 

Men hvis det er flere som har forslag tar jeg i mot det med takk!

Endret av Lurifaksen
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...