Quoted printable decoder (traduction csharp du code javascript de 2ni)

Contenu du snippet

Méthode permettant de décoder une chaîne de caratères en "quoted printable", enconding encore très utilisé par les agents mails.

Source / Exemple :


public string QP_Decode(string input)
        {
            string s = input;	//l'entree
            string result = "";	//la sortie
            string hexa = "0123456789ABCDEF"; //les caracteres hexa autorisés (Majuscules seulement. cf RFC)
            string mid = "";

            while (s != "") //tant qu'il y a des caracteres dans l'entrée...
            {
                if ((s.Substring(0, 1) == "="))  //oups, besoin d'être decodé ...
                {

                    if (s.Length < 3)	//est ce qu'il y a encore trois caractères...
                        return result;	//erreur pendant le décodage, on renvoi ce qui à déjà été decodé...

                    s = s.Substring(1, s.Length-1); //on supprime le signe '='  de l'entrée

                    mid = s.Substring(0, 2);		//on sauve le caractere sous sa forme hexadecimale
                    
                    s = s.Substring(2, s.Length-2);	//on supprime le caractere hexadecimal  de l'entrée

                    if (mid == "\r\n")
                    {	//On vérifie si on a un saut de ligne
                        result += mid;		//Oui, alors on l'ajoute à la sortie
                    }
                    else if (hexa.IndexOf(mid.Substring(0, 1)) != -1 && hexa.IndexOf(mid.Substring(0, 1)) != -1)
                    { //vérifie que le caractère est bien HexaDécimal
                        //int m =  System.Int32.Parse(mid); //on le converti en base 10
                        result += (char)Convert.ToInt16(mid, 16);//on converti le code ASCII obtenu en caractère et on l'ajoute à la sortie
                    }
                    else
                    {	//Le caractere n'est pas compris entre 00 et FF
                        return result; //erreur pendant le décodage, on renvoi ce qui à déjà été decodé...
                    }

                }
                else
                {	// Le caractère n'est pas un signe '=' on l'ajoute donc à la chaine 
                    result += s.Substring(0, 1);	// on l'ajoute donc au résultat
                    s = s.Substring(1, s.Length-1);	// on enlève le caractère de l'entrée
                }
            }
            return result;
        }

A voir également

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.