View Full Version : [C#] Compatibilità UrlDecode-UrlEncode
tomminno
28-05-2008, 11:03
Ho dei problemi nell'urldecode/urlencode per caratteri non standard.
ad esempio ° (carattere 176) viene codificato in %c2%b0 mentre dovrebbe essere solo %b0 e chiaramente %b0 non viene decodificato correttamente.
.NET usa UTF8 quindi il %c2 è corretto secondo la sua rappresentazione interna del carattere.
Ma come fare per renderlo interoperabile?
Non posso mica sapere sempre se dall'altra parte c'è qualcuno che usa l'UTF8 o meno e quindi capisce quello che gli invio.
Devi segliere un Enconding specifico.
Encoding latinencoding=Encoding.GetEncoding("latin1");
string res = HttpUtility.UrlEncode("pippo@°", latinencoding);
Console.WriteLine(res);
Console.ReadKey();
pippo%40%b0
Ovviamente in questo esempio dall'altra parte devono poter capire il latin1, quindi il problema e' simile.
tomminno
28-05-2008, 13:06
Ovviamente in questo esempio dall'altra parte devono poter capire il latin1, quindi il problema e' simile.
Già il problema è proprio questo.
E' impossibile sapere quale encoding usa il software con cui sto dialogando.
Potrei mandare una richiesta in GET ad una pagina PHP oppure ad un webservice o ad un cgi e non posso provarli tutti.
Soprattutto parlando di web e in linea del tutto generale.
Beh, se si tratta esplicitamente di richieste HTTP il discorso e' piu' semplice.
La richiesta HTTP di un client fatto bene (o comunque di un modulo che in quel momento agisce da client), dovrebbe avere valorizzato il campo RFC ContentEncoding, mappato nella HttpRequest del C#, che dichiara qual e' l'encoding del body della richiesta.
Io mi limiterei a rispettare questo encoding anche nella risposta, con un'adeguata speranza di essere capito.
tomminno
28-05-2008, 16:41
Beh, se si tratta esplicitamente di richieste HTTP il discorso e' piu' semplice.
La richiesta HTTP di un client fatto bene (o comunque di un modulo che in quel momento agisce da client), dovrebbe avere valorizzato il campo RFC ContentEncoding, mappato nella HttpRequest del C#, che dichiara qual e' l'encoding del body della richiesta.
Io mi limiterei a rispettare questo encoding anche nella risposta, con un'adeguata speranza di essere capito.
Il fatto che le richieste siano effettuate tramite HTTP non cambia la natura del problema, visto che è a livello dell'applicativo server che deve essere accettato un determinato encoding.
E un client non ha modo di conoscere l'encoding adottato dal server.
Si tratta ogni volta di provare i vari encoding fino a trovare quello corretto.
Non mi e' chiaro se stai scrivendo del codice lato client oppure lato server.
Se e' lato client non ho poi capito se il server e' un server web standard oppure se e' un server tuo Web e del quale dovrai magari sviluppare anche il codice
Oppure se stai scrivendo del codice C# per il server, e non sai quale Encoding usare per le risposte.
tomminno
28-05-2008, 17:01
Non mi e' chiaro se stai scrivendo del codice lato client oppure lato server.
Se e' lato client non ho poi capito se il server e' un server web standard oppure se e' un server tuo Web e del quale dovrai magari sviluppare anche il codice
Oppure se stai scrivendo del codice C# per il server, e non sai quale Encoding usare per le risposte.
Io sto scrivendo un client C# che dialoga con un cgi di google.
Io gli devo passare dei dati in get quindi l'encoding è corretto per il server web che lo riceve, ma l'applicativo cgi non lo capisce.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.