Comment définir le codage dans .getJSON JQuery

Dans mon application Web, je soumets des champs de formulaire avec la méthode jQuery $.getJSON() . J’ai des 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 .

Est-ce que quelqu’un sait, comment je peux définir l’encodage dans les appels $.getJSON ?

Je pense que vous devrez probablement utiliser $.ajax() si vous voulez changer l’encodage, voir le contentType ci-dessous (les rappels de success et d’ error supposent que vous avez

et

dans le 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); } }); 

Je devais juste faire ça il y a environ une heure, quelle coïncidence!

Si vous voulez utiliser $.getJSON() vous pouvez append 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 que vous voulez au lieu de utf-8 .

Les options sont expliquées ici .

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

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

Vous pourriez avoir besoin d’un ou des deux …

Vous devez parsingr les appels JSON à l’aide de Wireshark. Vous verrez donc si vous incluez le charset dans la formation de la page JSON ou non, par exemple:

  • Si la page est simple si text / 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 .Type de contenu: 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 Contrôle: sans cache
  • Si la page est du type incluant 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 Type-t: 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 but comme celui-ci:

Dans mon cas, j’utilise le fabricant Connect Me 9210 Digi:

  • J’ai dû utiliser un indicateur pour indiquer que l’on utiliserait un MIME non standard: p-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • Il a ajouté le nouveau MIME dans la variable: strcpy (p-> theCgiPtr-> fOtherMimeType, “text / html; charset = ISO-8859-1”);

Cela a fonctionné pour moi sans avoir à convertir les données transmises par JSON pour UTF-8 et ensuite refaire la conversion sur la page …

Utilisez encodeURI() dans le client JS et utilisez URLDecoder.decode() dans les travaux côté serveur Java.


Exemple:

  • Javascript :

     $.getJSON( url, { "user": encodeURI(JSON.ssortingngify(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);