Come effettuare URLEncode di una stringa in formato UTF8 con Visual Basic 6

How to URLEncode in UTF8 with Visual Basic 6

Visual Basic 6 (VB6) al giorno d’oggi è diventato quasi una creatura mitologica: non importa quanto tu possa cercare di eliminarlo dal proprio arsenale di strumenti di sviluppo, prima o poi torna sempre a perseguitarti, nella maggior parte dei casi sotto le sembianze di un vecchio software gestionale e/o di utilità varia che svolge un numero di funzioni magari estremamente limitato, ma comunque rilevante nell’economia aziendale. Quando questo software smette di funzionare, si rende ahimé necessario riesumare l’ambiente di sviluppo e correggere il problema.

Oggi in ufficio ci è toccato assistere a questa ennesima resurrezione, che ha riguardato un vecchio client software che ancora viene utilizzato – tra le altre cose – per svolgere alcune saltuarie request HTTP a servizi esterni parimenti obsoleti. Nello specifico, il problema era legato a una vecchia funzione  URLEncode nascosta da qualche parte del codice sorgente:

Questa funzione, che funziona bene lavorando con stringhe in formato Windows-1252, presenta non pochi problemi quando occorre produrre un risultato in formato UTF8. Ad esempio, il carattere À verrà convertito in %C0, che non sarà considerato valido a seguito di un URLDecode su un sistema UTF8.

Per correggere il problema abbiamo rapidamente messo in piedi il seguente workaround: si tratta in buona sostanza di un convertitore di formato da UTF16 a UTF8 che precede l’URLEncode vero e proprio, rendendolo compatibile con la maggior parte delle funzionalità URLDecode native dei principali framework in uso di recente (PHP, ASP.NET, JAVA e così via).

Una volta implementate le due funzioni, sarà sufficiente chiamare la prima, ovvero URLEncode_UTF8 (che include internamente la chiamata alla seconda) per ottenere una stringa URLEncoded in formato compatibile UTF-8.

Conclusione

Se vi siete imbattuti in questo articolo, è probabile che abbiate anche voi a che fare un problema del genere: ci auguriamo che questo contributo possa aiutarvi a risolverlo rapidamente.

Alla prossima!

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

2 Comments on “Come effettuare URLEncode di una stringa in formato UTF8 con Visual Basic 6”

  1. Mi sono imbattuto proprio nel medesimo problema: inviare una struìinga criptata da vb6 a PHP!
    e come dici tu non funzionava con i caratteri accentati ecc.
    ma il tuo wirkround non sono riuscito a farlo funzionare, innanzitutto c’è un errore nella funzione URLEncode_UTF8 : l’ultima riga GetEncodedUTF8String = Result dovrebbe essere URLEncode_UTF8 = Result oppure manca un bel pezzo di codice.
    Poi chiamando URLEncode_UTF8 proma di URLEncode viene fuori un disastro! adesso me la studio meglio spero di tirarci fuori le penne!

    1. Ho corretto gli errori (erano 2, entrambi corripondenti ai due output delle funzioni): ovviamente devi chiamare solo la prima funzione, ovvero URLEncode_UTF8: fammi sapere se adesso ti funziona.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.