cs_bmag
Messages postés10Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention13 juin 2006
-
12 juin 2006 à 17:35
cs_bmag
Messages postés10Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention13 juin 2006
-
13 juin 2006 à 13:02
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 ?
cs_bmag
Messages postés10Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention13 juin 2006 Modifié le 30 avril 2019 à 09:25
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.