Question

Dans mon application Web, je soumets des champs de formulaire avec jQuery $.getJSON() méthode.J'ai quelques problèmes avec l'encodage.Le jeu de caractères de mon application est charset=ISO-8859-1, mais je pense que ces champs sont soumis avec UTF-8.

Comment puis-je définir l'encodage utilisé dans $.getJSON appels?

Était-ce utile?

La solution

Je pense que tu devras probablement utiliser $.ajax() si vous souhaitez modifier l'encodage, consultez le contentType paramètre ci-dessous (le success et error les rappels supposent que vous avez <div id="success"></div> et <div id="error"></div> en HTML) :

$.ajax({
    type: "POST",
    url: "SomePage.aspx/GetSomeObjects",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: "{id: '" + someId + "'}",
    success: function(json) {
        $("#success").html("json.length=" + json.length);
        itemAddCallback(json);
    },
    error: function (xhr, textStatus, errorThrown) {
        $("#error").html(xhr.responseText);
    }
});

En fait, je devais le faire il y a environ une heure, quelle coïncidence !

Autres conseils

Si vous souhaitez utiliser $.getJSON() vous pouvez ajouter les éléments suivants avant l'appel :

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});

Vous pouvez utiliser le jeu de caractères souhaité au lieu de utf-8.

Les options sont expliquées ici.

contentType : Lors de l'envoi de données au serveur, utilisez ceci content-type.La valeur par défaut est application/x-www-form-urlencoded, ce qui convient dans la plupart des cas.

scriptCharset : Uniquement pour les demandes avec jsonp ou script type de données et type GET.Force la requête à être interprétée comme un certain jeu de caractères.Nécessaire uniquement pour les différences de jeu de caractères entre le contenu distant et local.

Vous en aurez peut-être besoin d'un ou des deux...

Vous devez analyser les appels JSON à l'aide de Wireshark, vous verrez donc si vous incluez ou non le jeu de caractères dans la formation de la page JSON, par exemple :

  • Si la page est simple si texte/html
0000  48 54 54 50 2f 31 2e 31  20 32 30 30 20 4f 4b 0d   HTTP/1.1  200 OK.
0010  0a 43 6f 6e 74 65 6e 74  2d 54 79 70 65 3a 20 74   .Content -Type: t
0020  65 78 74 2f 68 74 6d 6c  0d 0a 43 61 63 68 65 2d   ext/html ..Cache-
0030  43 6f 6e 74 72 6f 6c 3a  20 6e 6f 2d 63 61 63 68   Control:  no-cach
  • Si la page est du type incluant du JSON personnalisé avec MIME "charset = ISO-8859-1"
0000  48 54 54 50 2f 31 2e 31  20 32 30 30 20 4f 4b 0d   HTTP/1.1  200 OK.
0010  0a 43 61 63 68 65 2d 43  6f 6e 74 72 6f 6c 3a 20   .Cache-C ontrol: 
0020  6e 6f 2d 63 61 63 68 65  0d 0a 43 6f 6e 74 65 6e   no-cache ..Conten
0030  74 2d 54 79 70 65 3a 20  74 65 78 74 2f 68 74 6d   t-Type:  text/htm
0040  6c 3b 20 63 68 61 72 73  65 74 3d 49 53 4f 2d 38   l; chars et=ISO-8
0050  38 35 39 2d 31 0d 0a 43  6f 6e 6e 65 63 74 69 6f   859-1..C onnectio

Pourquoi donc?car on ne peut pas mettre sur la page de JSON un goal comme celui-ci :

Dans mon cas j'utilise le constructeur Connect Me 9210 Digi :

  • J'ai dû utiliser un indicateur pour indiquer que l'on utiliserait du MIME non standard :p-> theCgiPtr-> = fDataType eRpDataTypeAutre;
  • Il a ajouté le nouveau MIME dans la variable :strcpy (p-> theCgiPtr-> fOtherMimeType, "text/html;jeu de caractères = ISO-8859-1 ");

Cela a fonctionné pour moi sans avoir à convertir les données passées par JSON pour UTF-8 puis refaire la conversion sur la page...

Utiliser encodeURI() dans le client JS et utilisez URLDecoder.decode() sur le serveur, le côté Java fonctionne.


Exemple:

  • Javascript:

    $.getJSON(
        url,
        {
            "user": encodeURI(JSON.stringify(user))
        },
        onSuccess
    );
    
  • Java:

    java.net.URLDecoder.decode(params.user, "UTF-8");

Utilisez cette fonction pour retrouver les caractères utf-8

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

exemple:

var new_Str=decode_utf8(str);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top