IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Conversion d'encodage en javascript?


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Invit�
    Invit�(e)
    Par d�faut Conversion d'encodage en javascript?
    Bonjour,

    J'ai repris le d�veloppement d'un site en JSP (qui n'est pas mon langage pr�f�r�.... oh non....) et j'ai des probl�mes avec AJAX.

    J'ai une requ�te AJAX et il me retourne un String en UTF-8 mais mon site est en ISO-8859-1.

    Comment convertir l'encodage de ma chaine de caract�res?

  2. #2
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par d�faut
    Salut !

    Alors, pour commencer, si ce n'est pas imp�ratif de bosser en ISO-8859-1(5), travaille en UTF-8, �a devrait �tre plus fiable !

    Maintenant, v�rifie que :

    - ton serveur HTTP soit bien configur� pour ce qui est des MIME-types / charset (normalement c'est correct, sauf si tu as l'a tripatouill�);
    - ton service JSP fixe l'ent�te HTTP qu'il te faut (si c'est ISO-8859-1(5) alors soit);
    - les cha�nes que tu envoies soient v�ritablement encod�es en... ah ! ISO-8859-1(5) ? Ah bah non, c'est de l'UTF-8 par d�faut... ^^'

    Java et JavaScript utilisent UTF-8 par d�faut si je ne m'abuse. Donc si tu tiens � utiliser un autre encodage alors il faut le faire � chaque communication... Bref !

    Pour d�coder / encoder des cha�nes du c�t� JavaScript tu peux te servir de ces fonctions :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    function encodeUTF8(string) {
      return unescape(encodeURIComponent(string));
    }
     
    function decodeUTF8(string) {
      return decodeURIComponent(escape(string));
    }
    Je te laisse consulter leurs documentations respectives si tu as besoin de plus de d�tails (c'est int�ressant de comprendre ce qu'elles font).

    Finalement, tu devrais simplement pouvoir faire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    taChaîne = decodeUTF8(taChaîne);

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    @Oscar Hiboux: Merci pour ta solution. J'essais de la mettre en oeuvre mais j'ai une erreur :

    malformed URI sequence
    Je ne comprends pas pourquoi. Ma syntaxe :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    select_sous_cat = decodeUTF8(xhr.responseText);
    Qu'est-ce que l'URI ?

  4. #4
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par d�faut
    Hmm, on dirait que le contenu de la r�ponse est biscornu. As-tu la possibilit� de l'afficher ici ?

    URI c'est Unified Resource Identifier. C'est tr�s proche d'URL, mais... en diff�rent ! Je te laisse lire la page li�e au dessus, c'est bien expliqu�.

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par Oscar Hiboux Voir le message
    Hmm, on dirait que le contenu de la r�ponse est biscornu. As-tu la possibilit� de l'afficher ici ?

    URI c'est Unified Resource Identifier. C'est tr�s proche d'URL, mais... en diff�rent ! Je te laisse lire la page li�e au dessus, c'est bien expliqu�.
    Voil� la r�ponse :














    <select name='sous_cat' id='id_sous_cat' onChange='javascript:refresh_sousSousCat(1);' style='width
    :100%;display:block;'><option value=''>-- Sous-cat�gorie --</option><option value='243'>Moniteurs</option
    ><option value='247'>Enregistrement</option><option value='300'>Cam�ras</option><option value='307'>Accessoires
    </option><option value='328'>Solutions r�seaux</option><option value='464'>Portiers Vid�o</option></select
    >
    A part les retour � la ligne bizarres je ne vois pas de probl�me

  6. #6
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par d�faut
    Hmm, �trange. J'ai du mal � cerner ton probl�me et surtout assez peu de temps, ne le cachons pas !.. ^^'

    Essaye avec ces petites m�thodes que j'utilise pour mes affaires. Je les avais �crites dans le temps, ne connaissant pas encode/decodeURIComponent et finalement c'est �a que j'utilise quand j'en ai besoin. C'est plus verbeux � inclure dans ta biblioth�que de code mais au mode c'est platform agnostic (impl�mentation ind�pendante).

    Bien entendu, si tu n'utilises pas prototype.js il faudra sans doute adapter une ou deux bricoles, mais rien de grave, pas de panique !

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Object.extend(String.prototype, {
        encode: function(encoding) {
            encoding = encoding || "UTF-8";
     
            var result = "";
     
            if(encoding == "UTF-8") {
                var string = this.replace(/\r\n/g, "\n");
     
                for(var index = 0; index < string.length; index++) {
                    var c = string.charCodeAt(index);
     
                    if(c < 128) {
                        result += String.fromCharCode(c);
                    }
                    else if((c > 127) && (c < 2048)) {
                        result += String.fromCharCode((c >> 6) | 192);
                        result += String.fromCharCode((c & 63) | 128);
                    }
                    else {
                        result += String.fromCharCode((c >> 12) | 224);
                        result += String.fromCharCode(((c >> 6) & 63) | 128);
                        result += String.fromCharCode((c & 63) | 128);
                    }
                }
            }
            else {
                throw new Error("Unknown encoding: \"" + encoding + "\"");
            }
     
            return result;
        },
     
        decode: function(encoding) {
            encoding = encoding || "UTF-8";
     
            var result = "";
     
            if(encoding == "UTF-8") {
                var index = 0;
                var c = c1 = c2 = 0;
     
                while(index < this.length) {
                    c = this.charCodeAt(index);
     
                    if(c < 128) {
                        result += String.fromCharCode(c);
                        index++;
                    }
                    else if((c > 191) && (c < 224)) {
                        c2 = this.charCodeAt(index + 1);
                        result += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                        index += 2;
                    }
                    else {
                        c2 = this.charCodeAt(index + 1);
                        c3 = this.charCodeAt(index + 2);
                        result += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                        index += 3;
                    }
                }
            }
            else {
                throw new Error("Unknown encoding: \"" + encoding + "\"");
            }
     
            return result;
        }
    });
    Tel quel, tu l'utiliserais ainsi :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    "J'aime le café et la spéléologie.".encode();
    "À l'école, je n'aimais pas la géographie.".decode();
    (ou pas loin : l'�diteur du forum affiche mal les caract�res tordus, ahahah ! )

Discussions similaires

  1. Conversion d'un code javascript en php
    Par jazz3210 dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 2
    Dernier message: 07/02/2009, 20h48
  2. Conversion d"un code javascript en php
    Par jazz3210 dans le forum G�n�ral JavaScript
    R�ponses: 0
    Dernier message: 07/02/2009, 20h05
  3. Fonctions d'encodage en javascript
    Par csseur22 dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 21/01/2008, 19h47
  4. [JavaScript] [SRC] Conversion de @Explode en JavaScript
    Par St�phane Maillard dans le forum Contribuez
    R�ponses: 0
    Dernier message: 10/08/2007, 03h21
  5. Pb encodage avec javascript et JSP
    Par marti dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 21/12/2005, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo