Je cherche à écrire une classe VB pour encoder et décoder des données en Base64. Mon code marche très bien pour les chaîne de caractères conventionnel mais plante lamentablement lorsqu'il s'agit de données binaire.

L'encodage consiste à convertir les données binaires en une chaîne de caractère ASCII puis d'encoder la chaine en base64. Le decodage quand à lui se limite à décoder une chaîne en base64 et l'écrire dans un fichier vierge ou dans une variable (suivant qu'il s'agisse de données binaires ou de texte).

J'ai trouvé un article (particulièrement indigeste) sur MSDN parlant de ce problème, mais l'anglais n'est pas mon fort et les notions abordées commence à me dépasser légèrement. :p

http://msdn.microsoft.com/library/de...og6_topic1.asp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
' Récupération de données binaires dans un fichier
    Private Function getBinaryFile(strFilePath As String)
    ' Déclaration des variables
        Dim oStream
        Dim i, strValue
   ' Création de l'objet
        Set oStream = New ADODB.Stream
    ' Ouverture de l'objet
        oStream.Open
    ' On récupère les données binaires du fichier
        oStream.Type = 1
        oStream.LoadFromFile strFilePath
    ' On convertit les données binaires en ASCII
        strValue = StrConv(oStream.Read, vbUnicode)
        For i = 1 To LenB(binValue) Step 2
            strValue = strValue & Chr(AscB(MidB(binValue, i, 1)))
        Next
    ' On renvoie les données binaires
        getBinaryFile = strValue
    ' On détruit l'objet
        Set oStream = Nothing
    End Function
Mais le résultat est éroné même s'il est similaire à l'original comme le rajout de " 'd" en debut de chaine ou les changements des "Ž" en "}" ou encore des "‰" en "0".

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Original (extrait):
GIF89aËè³     ï  ïïïÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,    Ëè 
(...)
FgT!ÃҎُi‰	©ɐ
9‰   ;
 
Copie (extrait): 
 'dGIF89aËè³     ï  ïïïÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,    Ëè 
(...)
FgT!ÃÒ}ُi0	©ɐ
90
Je ne pense pas que l'encodage/decodage en base64 soit fautif puisque c'est un code que j'ai recyclé à partir de l'ASP et qu'il fonctionnait parfaitement avec des mail contenant du text en base64 (chaîne de caractères) et des images jointes (données binaires).

Donc voilà, si quelqu'un a des conseils sur comment éffectuer proprement la conversion de données binaire en chaines de caractère sous VB6, ou l'adresse d'un tutorial simple et explicite sur ce sujet, je suis preneur.
Merci d'avance pour toutes propositions permettant de faire avancer mon schmilblick. ^^



A noter que sous ASP, la conversion du binaire en ASCII était plus simple (le code ci dessous ne reprend que la convertion binaire vers ASCI):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    Private Function BinaryToString(binValue)
        Dim i, strValue
        For i = 1 To LenB(binValue)
            strValue = strValue & Chr(AscB(MidB(binValue, i, 1)))
        Next
        BinaryToString = strValue
    End Function