Quoted Printable
Algorithme utilisé par Up ! System
L'algorithme Quoted Printable de l'Internet Engineering Task Force (IETF) permet d'encoder un flux binaire en un flux texte en écrivant les octets ne correspondant pas à des caractères usuels en hexadécimal.
Son principe est le suivant :
- Caractères usuels.
Tous les caractères usuels dont le code Ascii est compris entre 33 et 126, à l'exception du caractère égal =, peuvent être écrit directement.
Toutefois, ils peuvent être encodés.
- Caractères spéciaux.
Tous les caractères spéciaux dont le code Ascii est compris entre 9 et 32 ne peuvent être écrits directement s'ils sont présents en fin de ligne. Ils doivent être encodés.
Toutefois, ils peuvent être écrits directement en milieu de ligne.
- Encodage.
L'encodage d'un caractère est préfixé par le caractère égal =. Le caractère encodé est écrit en hexadécimal majuscule sur deux chiffres.
La taille de la ligne ne doit pas dépasser 76 caractères une fois encodée. Une ligne non encodée peut être découpée en plusieurs lignes encodées dont les premières se terminent par les caractères égal =, saut de ligne \n et retour chariot \r non encodés.
Le saut de ligne est représenté par les deux caractères successifs saut de ligne \n et retour chariot \r non encodés et non précédés du caractère égal =.
Exemple d'un flux encodé l'algorithme Quoted Printable
Flux non encodé
/* ------------------------------------------------------------------- */
/* Fichier : clientftp.upl */
/* Objet : Exemple d'emploi d'Up ! Network. */
/* */
/* Module : Up ! Application System. */
/* Auteur-Date : DUVAL Jean-Pierre - Novembre 2003. */
/* ------------------------------------------------------------------- */
/* Observations */
/* */
/* */
/* ------------------------------------------------------------------- */
Source Composant "Exemple d'emploi d'Up ! Network" Version 4.0.0;
ImporterModule
UpsFts(, ImporterDefinitions);
Variable
/******/
MonServeur : Nul Ou ServeurFtp;
Principal
/*******/
Debut
MonServeur=ServeurFtp("ftp://local:21");
MonServeur.ChangerConnexion("anonymous", "contact@mon-domaine.com");
MonServeur.ChangerEtatTypeDonnees(TypeDonneesAscii);
CopierFichier("C:/tmp2/essai.txt", "ftp://local:21/tmp/essai.txt");
MonServeur.ChangerEtatTypeDonnees(TypeDonneesImage);
CopierFichier("ftp://local:21/tmp/essai.doc", "C:/tmp2/essai.doc");
MonServeur=Nul;
Fin Principal
Flux encodé
/*=20-------------------------------------------------------------------=20=
*/
/*=20Fichier=20=20=20=20:=20clientftp.upl=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20*/
/*=20Objet=20=20=20=20=20=20:=20Exemple=20d'emploi=20d'Up=20!=20Network.=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20*/
/*=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20*/
/*=20Module=20=20=20=20=20=20:=20Up=20!=20Application=20System.=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
*/
/*=20Auteur-Date=20:=20DUVAL=20Jean-Pierre=20-=20Novembre=202003.=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20*/
/*=20-------------------------------------------------------------------=20=
*/
/*=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20Observations=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20*/
/*=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20*/=20
/*=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20*/=20
/*=20-------------------------------------------------------------------=20=
*/
Source=20Composant=20"Exemple=20d'emploi=20d'Up=20!=20Network"=20Version=20=
4.0.0;
ImporterModule=20
=20=20=20UpsFts(,=20ImporterDefinitions);
Variable
/******/
=20=20=20MonServeur=20:=20Nul=20Ou=20ServeurFtp;
Principal
/*******/
Debut
MonServeur=3DServeurFtp("ftp://local:21");
MonServeur.ChangerConnexion("anonymous",=20"contact@mon-domaine.com");
MonServeur.ChangerEtatTypeDonnees(TypeDonneesAscii);
CopierFichier("C:/tmp2/essai.txt",=20"ftp://local:21/tmp/essai.txt");
MonServeur.ChangerEtatTypeDonnees(TypeDonneesImage);
CopierFichier("ftp://local:21/tmp/essai.doc",=20"C:/tmp2/essai.doc");
MonServeur=3DNul;
Fin=20Principal