Innanzi tutto saluto tutti.
Inizio a dirvi che ovviamente sono un neofita che proviene da vb6 e si stà approcciando proprio a asp.net, vi descrivo l'applicazione realizzata in poche parole.... ho un oggetto ocx che ha delle proprietà e dei metodi che mi permette di inviare sms, per far ciò accede ad una sezione del nostro sito (asp.net) che riceve i parametri ed invia gli sms. Le chiamate da vb6 ad asp.net sono tutte fatte in modalità GET. Ho provveduto a codificare tutte le stringhe inviate cin modo da sostituire i caratteri speciali tra cui le accentate con % ed il loro valore esadecimale della tabella ascii... da subito mi sono accorto che se chiamavo:
http://miosito/default.aspx?testo=questa+%e8+una+prova
su visual studio 2008
Request.Querystring("testo") mi visualizzava
"questa � una prova"
se facevo UrlDecode(Request.QueryString("testo")) mi dava la stessa cosa
"questa � una prova"
Allora leggendo in giro ho letto che la codifica utilizzata di default da VS2008 è l'UTF-8 quindi la "è" si codifica con "%c3%a8".... per cui richiamo la pagina con
http://miosito/default.aspx?testo=qu...3%a8+una+prova
ed alla richiesta di Request.Querystring("testo") mi restituisce
"questa è una prova"
Ora fin qui tutto ok, anzi no, perchè la querystring è già decodificata?
se controllo il valore di Request.RawUrl ottengo testo=questa+%c3%a8+una+prova
Quindi Request.QueryString("testo") doveva restiuirmi:
questa+%c3%a8+una+prova
mentre invece UrlDecode(Request.QueryString("testo")) il valore decodificato
questa è una prova
Mi piacerebbe capire le ragioni di questo comportamento, e magari dove poter modificare il charset da UTF-8 in altro.... Ho provato a mettere nelle pagine session.codepage = 1252 o altro ma non cambia nulla, così come aggiungere il tag:
<meta http-equiv="Content-Type" content="text/html; charset=1252" />
Ma anche questo non ha efficacia sulla codifica, l'unico modo per specificare il tipo di codifica è usare:
urldecode("%e8",Encoding.GetEncoding(1252)) allora ottengo una "è".
solo che se chiamo la pagina con
http://miosito/default.aspx?testo=%e8
e faccio:
urldecode(request.QueryString("testo"),Encoding.Ge tEncoding(1252))
putroppo ottengo "�" perchè è già attiva "la codifica UTF-8 automatica" che anticipa tutto.... almeno sembrerebbe......
Tra l'altro sono giorni che googolo ma non sono riuscito a venirne a capo..... se non modificare l'oggetto ocx vb6 facendo una codifica UTF-8 delle varie get..... solo che è un aggirare il problema anziché risolverlo.
Dimenticavo il framework è il 3.5.

Rispondi quotando