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

cs_bmag 10 Messages postés jeudi 22 mai 2003Date d'inscription 13 juin 2006 Dernière intervention - 12 juin 2006 à 17:35 - Dernière réponse : cs_bmag 10 Messages postés jeudi 22 mai 2003Date d'inscription 13 juin 2006 Dernière intervention
- 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 ?
Afficher la suite 

4 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 12 juin 2006 à 18:06
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
cs_bmag 10 Messages postés jeudi 22 mai 2003Date d'inscription 13 juin 2006 Dernière intervention - 13 juin 2006 à 09:13
0
Utile
Merci pour cette réponse rapide
Commenter la réponse de cs_bmag
OneHacker 1466 Messages postés jeudi 2 novembre 2000Date d'inscription 23 septembre 2007 Dernière intervention - 13 juin 2006 à 12:10
0
Utile
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
Commenter la réponse de OneHacker
cs_bmag 10 Messages postés jeudi 22 mai 2003Date d'inscription 13 juin 2006 Dernière intervention - 13 juin 2006 à 13:02
0
Utile
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.
Commenter la réponse de cs_bmag

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.