Décoder de l'UTF8 en ASCII [Résolu]

Signaler
Messages postés
10
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
13 juin 2006
-
Messages postés
10
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
13 juin 2006
-
Je développe un CGI en VB6 (et oui, on peut ... ;) ) mais je rencontre une difficulté à traiter les données issues de la STDIN (Méthode POST du formulaire). En effet, les données sont en UTF-8 "étendu" et non en UTF-8 tout court

En gros, le caractère ascii "é", codé sur 1 octet, pour valeur 233 en unicode a pour valeur C3 A9 en UTF-8 à savoir Ã(c). Bon je ne sais pas si c'est bien retranscrit, masi il s'agit d'un A majuscule avec une tilde suivi du symbole copyright.
Sauf que dans mon cas, je reçois en remplacement du "é" non pas ces deux caractères contigus mais la chaine %C3%A9, soit 6 caractères que les fonctions de conversion ignorent royalement (conversion par MultiByteToWideChar).
Quelle est la bonne méthode pour convertir les données issues du formulaire sur une page web en ASCII dans un CGI en VB6 ?

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
J'ai été confronté à ce problème aussi tout récemment.
Je te livre les liens chez qui j'ai trouvé de l'aide.
http://cryptosys.net/pki/index.html
http://www.cs.tut.fi/~jkorpela/chars.html
Transformer UTF-8 <--> UTF-16 : http://www.cyberactivex.com/
et http://www.cyberactivex.com/UnicodeTutorialVb.htm
Idem : http://www.nonhostile.com/howto-convert-byte-array-utf8-string-vb6.asp
Il existe une solution assez sympa qui consiste à utiliser les fonctions natives de VB.Net dans VB6 : http://www.motobit.com/tips/detpg_convert-charset-vbnet/

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
Messages postés
10
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
13 juin 2006

Merci pour cette réponse rapide
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
En VB.Net : dim txt as String "blabla"
 Dim Result as String = asc(txt)

je pense que l'équivalent existe en VB6.

Sinon tu programmes du CGI à partir de VB6 je savais pas, je pensais qu'il y avait un language CGI.

Redman
Messages postés
10
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
13 juin 2006

En fait, j'ai simplement adapté une fonction trouvée sur ce forum afin de prendre en compte ce cas bien précis, j'ai ajouté les lignes en rouge ci-dessous

Public Function UTF8_Decode(ByVal Text As String) As String
Dim lLength As Long
Dim sBuffer As String
    For i = 1 To Len(Text)
        If Mid(Text, i, 1) = "%" Then
           Mid(Text, i, 1) = Chr(Val("&H" & Mid(Text, i + 1, 2)))
           Mid(Text, i + 1, 2) = Chr(255) & Chr(255)
        End If
    Next
    Text = Replace(Text, Chr(255), "")
    Text = StrConv(Text, vbFromUnicode)
    lLength = MultiByteToWideChar(CP_UTF8, 0, StrPtr(Text), -1, 0, 0)
    sBuffer = Space$(lLength)
    lLength = MultiByteToWideChar(CP_UTF8, 0, StrPtr(Text), -1, StrPtr(sBuffer), Len(sBuffer))
    UTF8_Decode = Left$(sBuffer, lLength - 1)
End Function


VB6, n'est évidement pas le langage de prédilection des CGI mais ça reste bien pratique quand même.