Frage

In meinem web-app, die ich vorlegen, ein Formular mit jQuery $.getJSON() Methode.Ich habe einige Probleme mit der Codierung.Der Charakter-der app charset=ISO-8859-1, aber ich denke, dass diese Felder werden zusammen mit UTF-8.

Wie kann ich set encoding verwendet $.getJSON Anrufe?

War es hilfreich?

Lösung

Ich denke, dass Sie wahrscheinlich zu verwenden $.ajax() wenn Sie möchten ändern Sie die Codierung finden Sie in der contentType param unten (die success und error angenommen, Sie haben Rückrufe <div id="success"></div> und <div id="error"></div> im html-Code):

$.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);
    }
});

Ich eigentlich gerade zu tun hatte, das vor etwa einer Stunde, was für ein Zufall!

Andere Tipps

Wenn Sie verwenden möchten $.getJSON() Sie können fügen Sie die folgenden, bevor der Anruf :

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

Sie können den Zeichensatz Sie möchten statt utf-8.

Die Optionen erklärt hier.

contentType : Wenn das senden der Daten an den server, verwenden Sie diese content-type.Standardmäßig ist application/x-www-form-urlencoded, und das ist gut für die meisten Fälle.

scriptCharset : Nur für Anfragen, die mit jsonp oder script Datentyp und HOLEN Sie sich geben.Kräfte der Wunsch interpretiert werden als eine bestimmte Zeichenkodierung.Nur benötigt für den charset-Unterschiede zwischen den remote-und lokalen Inhalten.

Sie müssen möglicherweise eine oder beide ...

Sie müssen analysieren Sie die JSON-Anrufe mit Wireshark verfolgen, so sehen Sie aus, wenn Sie das charset in der Bildung der JSON-Seite haben oder nicht, zum Beispiel:

  • Wenn die Seite ist einfach, wenn 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   .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
  • Wenn die Seite ist von der Art, einschließlich benutzerdefinierter JSON-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

Warum ist das so?weil wir können nicht auf der Seite von JSON ein Ziel wie dieses:

In meinem Fall nutze ich den Hersteller Connect Me 9210 Digi:

  • Ich musste ein flag, um anzugeben, dass für den Einsatz von nicht-standard-MIME:p-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • Er fügte hinzu, die neue MIME in die variable:strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html;charset = ISO-8859-1 ");

Es funktionierte für mich die zimmerreserviereung, ohne das Sie konvertieren die Daten von JSON für UTF-8 und wiederholen Sie dann die Konvertierung auf der Seite ...

Verwenden encodeURI() in client-JS und-Nutzung URLDecoder.decode() in server-Java-Seite funktioniert.


Beispiel:

  • Javascript:

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

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

Verwenden Sie diese Funktion, um wieder die utf-8-Zeichen

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

Beispiel:

var new_Str=decode_utf8(str);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top