Domanda

Nella mia web app, vi sottopongo alcuni campi del form con jQuery $.getJSON() metodo.Sto avendo alcuni problemi con la codifica.Il set di caratteri la mia app è charset=ISO-8859-1, ma penso che questi campi sono presentati con UTF-8.

Come posso impostare la codifica utilizzata in $.getJSON chiamate?

È stato utile?

Soluzione

Penso che probabilmente dovrete utilizzare $.ajax() se si desidera modificare la codifica, vedere il contentType param qui di seguito (il success e error richiamate si supponga di disporre di <div id="success"></div> e <div id="error"></div> in 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);
    }
});

In realtà ho dovuto fare questo circa un'ora fa, che coincidenza!

Altri suggerimenti

Se si desidera utilizzare $.getJSON() è possibile aggiungere la seguente prima della chiamata :

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

È possibile utilizzare il set di caratteri che si desidera, invece di utf-8.

Le opzioni sono spiegato qui.

contentType : Quando l'invio dei dati al server, è possibile utilizzare questo content-type.Di Default è application/x-www-form-urlencoded, che è bene per la maggior parte dei casi.

scriptCharset : Solo per le richieste con jsonp o script il tipo di dati e di OTTENERE il tipo.Le forze che la richiesta di essere interpretato come un determinato set.Necessario solo per il set di caratteri differenze tra il telecomando e il contenuto locale.

Potrebbe essere necessario uno o entrambi ...

È necessario analizzare il JSON chiamate utilizzando Wireshark, così potrete vedere se si include il set di caratteri nella formazione del JSON pagina o non, per esempio:

  • Se la pagina è semplice, se il testo / 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
  • Se la pagina è di tipo JSON personalizzato con 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

Perché è che?perché non siamo in grado di mettere sulla pagina del JSON un obiettivo come questo:

Nel mio caso io uso il produttore Mi 9210 Digi:

  • Ho dovuto usare un flag per indicare che l'uso non-standard MIME:p-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • È stato aggiunto il nuovo MIME nella variabile:strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html;charset = ISO-8859-1 ");

Ha funzionato per me senza dover convertire i dati passati da JSON per UTF-8 e poi rifare la conversione sulla pagina ...

Utilizzare encodeURI() in JS client e utilizzare URLDecoder.decode() nel server Java lato funziona.


Esempio:

  • Javascript:

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

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

Utilizzare questa funzione per ritrovare i caratteri utf-8

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

esempio:

var new_Str=decode_utf8(str);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top