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

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

Votre réponse

4 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
12 juin 2006 à 18:06
3
Merci
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

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
10
Date d'inscription
jeudi 22 mai 2003
Dernière intervention
13 juin 2006
13 juin 2006 à 09:13
0
Merci
Merci pour cette réponse rapide
Commenter la réponse de cs_bmag
Messages postés
1466
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
23 septembre 2007
13 juin 2006 à 12:10
0
Merci
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
Messages postés
10
Date d'inscription
jeudi 22 mai 2003
Dernière intervention
13 juin 2006
13 juin 2006 à 13:02
0
Merci
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.