Comment définir l'encodage dans .getJSON jQuery
-
09-06-2019 - |
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?
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);