Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

decoder UTF8

18 réponses
Avatar
Marc
Bonjour,

Je cherche une source pour décoder de l'UTF-8 en AINSI ??

Quelqu'un a t il cela sous la main.

Par avance merci.

Marc

10 réponses

1 2
Avatar
jean-marc
"Marc" wrote in message
news:
Bonjour,



Hello,

Je cherche une source pour décoder de l'UTF-8 en AINSI ??

Quelqu'un a t il cela sous la main.

Par avance merci.



Ceci devrait convenir:
http://www.codyx.org/snippet_ainsi-vers-utf8-vice-versa_54.aspx

Sinon, Google : "VB6 UTF8"

Voir aussi car ça peut être intéressant les possibilités de
la fonction VB StrConv():
http://msdn2.microsoft.com/en-us/library/aa263373(VS.60).aspx

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Marc
Merci Jean Marc de ta rapidité,

j'ai déjà essayer ce source il ne convient pas.
En fait mon code ressemble à çà:


Content-Type: text/html;
charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

....

<DIV><FONT face=Arial size=2>je suis déçu de ne pas venir chez vous, nous ne
sommes pas venu depuis avant la naissance d'Anne-Sophie</FONT></DIV>





"jean-marc" a écrit dans le message de news:
4641da53$0$13854$
"Marc" wrote in message
news:
Bonjour,



Hello,

Je cherche une source pour décoder de l'UTF-8 en AINSI ??

Quelqu'un a t il cela sous la main.

Par avance merci.



Ceci devrait convenir:
http://www.codyx.org/snippet_ainsi-vers-utf8-vice-versa_54.aspx

Sinon, Google : "VB6 UTF8"

Voir aussi car ça peut être intéressant les possibilités de
la fonction VB StrConv():
http://msdn2.microsoft.com/en-us/library/aa263373(VS.60).aspx

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/





Avatar
Jean-marc
Marc wrote:
Merci Jean Marc de ta rapidité,

j'ai déjà essayer ce source il ne convient pas.
En fait mon code ressemble à çà:


Content-Type: text/html;
charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

....

<DIV><FONT face=Arial size=2>je suis déçu de ne pas
venir = chez vous, nous ne
sommes pas venu depuis avant la naissance d'Anne-Sophie</FONT></DIV>




Ah ok.

Alors c'est tout simple. Tu parcours la chaine à la recherche du signe
égal (=), puis tu lis les 2 caractères suivants, ce qui te donne une
valeur en hexa, et tu fais un remplacement du "=" suivi des 2 caractères
par le caractère obtenu en trouvant le caractère corresondant à ce
code en UTF8.
pour la valeur décimal du code, un simple:
Val("&H" & code)

Par exemple Val("&H" & "3D") ==> 61

Bref, pas compliqué, juste un peu chiant.

Voici un canevas:
rivate Function DecodeHexaEncoded(ByVal s As String) As String
Dim p As Long
Dim sDecoded As String
Dim code As String

p = InStr(s, "=")
While p <> 0
sDecoded = sDecoded & Mid$(s, 1, p - 1)
code = Mid$(s, p + 1, 2)
sDecoded = sDecoded & Chr$(Val("&h" & code))
s = Mid$(s, p + 3)
p = InStr(p + 1, s, "=")
Wend
DecodeHexaEncoded = sDecoded
End Function

Si tu fais tourner ceci, ça marche sauf pour les caractères accentués.
Il suffit d'adapter la ligne:
sDecoded = sDecoded & Chr$(Val("&h" & code))

en remplacant le Chr$() par la fonction de remplacement qui
va recalculer le bon caractère.

Espérant que cela t'aide.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Aski
Hello Jean-marc,

Tu as savamment écrit :

Marc wrote:



Alors c'est tout simple. Tu parcours la chaine à la recherche du signe
égal (=), puis tu lis les 2 caractères suivants, ce qui te donne une
valeur en hexa, et tu fais un remplacement du "=" suivi des 2
caractères par le caractère obtenu en trouvant le caractère
corresondant à ce code en UTF8.
pour la valeur décimal du code, un simple:
Val("&H" & code)

Par exemple Val("&H" & "3D") ==> 61

Bref, pas compliqué, juste un peu chiant.

Voici un canevas:
rivate Function DecodeHexaEncoded(ByVal s As String) As String
Dim p As Long
Dim sDecoded As String
Dim code As String

p = InStr(s, "=")
While p <> 0
sDecoded = sDecoded & Mid$(s, 1, p - 1)
code = Mid$(s, p + 1, 2)
sDecoded = sDecoded & Chr$(Val("&h" & code))
s = Mid$(s, p + 3)
p = InStr(p + 1, s, "=")
Wend
DecodeHexaEncoded = sDecoded
End Function

Si tu fais tourner ceci, ça marche sauf pour les caractères accentués.
Il suffit d'adapter la ligne:
sDecoded = sDecoded & Chr$(Val("&h" & code))

en remplacant le Chr$() par la fonction de remplacement qui
va recalculer le bon caractère.



Pourquoi ne pas utiliser la fonction Replace ?
Je l'ai fait dans un module de décodage de messages eml/nws en utilisant
également "Select Case"
Avatar
Fred
Dans : news:46421557$0$14233$,
Jean-marc écrivait :

Hello Jean-Marc

Alors c'est tout simple. Tu parcours la chaine à la recherche du signe
égal (=), puis tu lis les 2 caractères suivants, ce qui te donne une
valeur en hexa,



Attention, le signe égal peut-être seul en fin de ligne. C'est utilisé
lorsqu'une ligne coupée se termine par un espace ou une tabulation.
http://www.ietf.org/rfc/rfc2045.txt (page 18)

C'est d'ailleurs le cas dans l'exemple donné par Marc.


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Gloops
Aski a écrit, le 09/05/2007 20:54 :
Pourquoi ne pas utiliser la fonction Replace ?
Je l'ai fait dans un module de décodage de messages eml/nws en utilis ant
également "Select Case"



Salut,

Oui, ça me rappelle des trucs, ça.
ça veut dire qu'il ne faut pas oublier un cas.
Un jour tu as un nouveau caractère qui apparaît, tu retouches ton cod e,
ça marche, et pareil à la fois suivante.

En maths on connaît les deux méthodes, et on dit qu'un ensemble peut
être défini en extension ou en compréhension. En extension on donne la
liste complète de ce qu'on est susceptible de trouver (Select Case), en
compréhension on donne une règle générale.
Avatar
Aski
Hello Gloops,

Tu as savamment écrit :

Aski a écrit, le 09/05/2007 20:54 :
Pourquoi ne pas utiliser la fonction Replace ?
Je l'ai fait dans un module de décodage de messages eml/nws en
utilisant également "Select Case"



Salut,

Oui, ça me rappelle des trucs, ça.
ça veut dire qu'il ne faut pas oublier un cas.
Un jour tu as un nouveau caractère qui apparaît, tu retouches ton
code, ça marche, et pareil à la fois suivante.



C'est effectivement la méthode que j'ai utilisée car on en oublie toujours
un.

En maths on connaît les deux méthodes, et on dit qu'un ensemble peut
être défini en extension ou en compréhension. En extension on donne la
liste complète de ce qu'on est susceptible de trouver (Select Case),
en compréhension on donne une règle générale.



Bourbaki à la poubelle ....
Avatar
Aski
Hello Fred,

Tu as savamment écrit :

Dans : news:46421557$0$14233$,
Jean-marc écrivait :

Hello Jean-Marc

Alors c'est tout simple. Tu parcours la chaine à la recherche du
signe égal (=), puis tu lis les 2 caractères suivants, ce qui te
donne une valeur en hexa,



Attention, le signe égal peut-être seul en fin de ligne. C'est utilisé
lorsqu'une ligne coupée se termine par un espace ou une tabulation.
http://www.ietf.org/rfc/rfc2045.txt (page 18)

C'est d'ailleurs le cas dans l'exemple donné par Marc.



Il faut donc commencer à rechercher ce signe suivi d'un retour ligne et
l'éliminer.
Avatar
Fred
Dans : news:,
Aski disait :
Hello Fred,



Hello Henri,

Il faut donc commencer à rechercher ce signe suivi d'un retour ligne
et l'éliminer.



Pas exactement. Sinon ce signe serait inutile.
Il est placé là pour éviter les erreurs lorsque que certains agents de
transferts complémentent la ligne avec des espaces, plutôt que de
tronquer.
Je ne sais pas si cela peut toujours se produire à l'heure actuelle mais
c'est ce qui est dit dans la référence.

Il faut plutôt chercher les signes «=» non suivis d'un chiffre hexa et
supprimer toute la fin de la ligne.


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Aski
Hello Fred,

Tu as savamment écrit :

Dans : news:,
Aski disait :
Hello Fred,



Hello Henri,

Il faut donc commencer à rechercher ce signe suivi d'un retour ligne
et l'éliminer.



Pas exactement. Sinon ce signe serait inutile.
Il est placé là pour éviter les erreurs lorsque que certains agents de
transferts complémentent la ligne avec des espaces, plutôt que de
tronquer.
Je ne sais pas si cela peut toujours se produire à l'heure actuelle
mais c'est ce qui est dit dans la référence.

Il faut plutôt chercher les signes «=» non suivis d'un chiffre hexa et
supprimer toute la fin de la ligne.



Pourtant des extraits du décodage dans XtractOE sont
S = Replace(S, "=" & vbCrLf, "")
puis (partiel)
For i = &H20 To &H2F
S = Replace(S, "=" & Format$(Hex$(i)), Chr$(i)) '32 à 47
Next i

et ce décodage fonctionne assez bien.

Henri
1 2