samedi 21 avril 2012

Problème de décodage des caractères après lecture d'un cookie (asp.net)

Voici un problème que j'ai mis quelques temps à résoudre :

J'enregistre une donnée dans un cookie à l'aide de l'instruction javascript suivante :


function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}



Je lis cette donnée depuis asp.net côté server par l'instruction suivante :

Request.Cookies[name].Value;


Et voilà que les accents et autres caractères français sont mal décodés.

J'ai donc ajouté cette fonction :


private string Decoder(string valeur)
{
        byte[] temp;
        temp = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(valeur);
        temp = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding("UTF-8"), System.Text.Encoding.GetEncoding("ISO-8859-1"), temp);
        return System.Text.Encoding.UTF8.GetString(temp);
}


Ce qui transforme mon instruction de lecture asp.net en :

Decoder(Request.Cookies[name].Value);


Et là ça marche même avec un serveur anglais.