Forum Clubic

Retour à la ligne dans fichiers décodés (Base64)

Bonjour tous le monde,

Je suis en train de créer une DLL pour vérifier si on a des emails (via serveur POP3). J’ai donc créer ma DLL et récupérer les fichier joints.

Le problème c’est que ces fichiers joint sont encodé en Base64. J’ai alors recherché un fonction qui puisse décoder le fichier attaché. Mais les deux fonctions que j’ai trouvée sur le web me mettent des fois des retours à la ligne dans le code décodé, alors que dans le fichier original (codé en base 64) ces retours à la ligne n’existent pas…

Une idée? parce que là c’est le dernier mur afin que je finisse ma Dll.

Merci d’avance

Mes dons de médium me disent que le problème se situe à la ligne 37…

Sinon, l’encodage en base 64 est tout sauf compliqué : 6 bits utiles par caractères -> 4 caractères pour coder 3 octets, la table de correspondance caractère <-> valeur est dispo un peu partout (http://www.faqs.org/rfcs/rfc3548.html), pourquoi n’essaies-tu pas de le faire toi-même?

Euh, c’est vrai je peux faire cette algo, mais ca servirait à quoi??? J’aurais quand même cette erreur. Un retour à la ligne ne vient pas comme ça par hasard…

Voici l’algo que j’ai trouvé sur le web (www.salemichoe.com rubrique MIME). Je ne sais pas si vous voyez une erreur qui ferait qu’il y a des retours à la ligne en trop

[cpp] FILE *f, *g;
unsigned char buff[4];

f = fopen("UnTest.JPG","r");
g = fopen("output.txt","w");


while ( fread(buff,1,4,f) == 4 )
{

	char d1 = b(buff[0])<<2   | b(buff[1])>>4 &amp; 0x3; 
	fprintf(g,"%c", d1);
	isEnd(buff[2]);
  
	char d2 = b(buff[1])<<4 | b(buff[2])>>2 &amp; 0xF;
	fprintf(g,"%c",d2);
	isEnd(buff[3]);

	char d3 = b(buff[2])<<6 | b(buff[3]) &amp; 0x3F;
	fprintf(g,"%c",d3);

}

fclose(f);
fclose(g);[/cpp]

A part ca le RFC de MIME m’a pas aidé, je l’avais déjà regardé avant.

L’encodage MIME est sur 70 colonnes (de mémoire)… Tu as pensé à enlever les retours à la ligne avant le décodage?

En faite j’ai essayé de l’enlever manuellement une fois mais ça m’a fait un fichier totalement différent. Enfin c’est peut être que je n’ai pas bien tout enlevé.
Mais c’est vrai je vais essayé de faire ça. Ca vient sans doute de ça.

Merci pour l’aide

Euh ben j’ai testé, et puis rien.
Tout les retour à la ligne sont bien enlevés mais le seul problème c’est que certain retour à la ligne qui était dans le fichier original n’y sont plus. Et surtout certaine parties (pas le tout début) sont différent du fichier de base et de fichier encodé puis décodé.

Pfffff je n’y comrpend plus rien.
Pourtant deux algos que j’ai trouvé sur internet font le même problème. J’ai regardé ce n’est pas la “version de base64” qui change.
J’ai aussi essayé de faire passer la pièce jointe depuis un webmail et aussi depuis Thunderbird, mais rien ne change.

:frowning: