44

私の Web アプリでは、jQuery の$.getJSON()メソッドを使用していくつかのフォーム フィールドを送信します。エンコーディングに問題があります。私のアプリの文字セットは ですがcharset=ISO-8859-1、これらのフィールドは で送信されていると思いますUTF-8

$.getJSON通話で使用されるエンコードを設定するにはどうすればよいですか?

4

6 に答える 6

45

使用したい場合は$.getJSON()、呼び出しの前に次を追加できます。

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

の代わりに必要な文字セットを使用できますutf-8

オプションについては、こちらで説明しています。

contentType :サーバーにデータを送信する場合は、これを使用しますcontent-type。デフォルトはapplication/x-www-form-urlencodedです。ほとんどの場合、これで問題ありません。

scriptCharset :jsonpまたはscriptdataType および GET タイプのリクエストのみ。リクエストが特定の文字セットとして解釈されるように強制します。リモート コンテンツとローカル コンテンツの文字セットが異なる場合にのみ必要です。

どちらかまたは両方が必要な場合があります...

于 2008-08-25T22:12:25.900 に答える
36

$.ajax()エンコーディングを変更したい場合は、おそらく使用する必要があると思います。以下のcontentTypeパラメーターを参照してください (successおよびコールバックは、htmlにandがあるとerror想定しています)。<div id="success"></div><div id="error"></div>

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

私は実際に約 1 時間前にこれをしなければならなかったのですが、なんて偶然でしょう!

于 2008-08-25T19:23:06.447 に答える
5

Wireshark を使用して JSON 呼び出しを分析する必要があるため、JSON ページの構成に文字セットを含めるかどうかを確認します。次に例を示します。

  • ページがシンプルならテキスト/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 コントロール: no-cach
  • ページがMIME「charset = ISO-8859-1」のカスタムJSONを含むタイプの場合
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 .キャッシュ制御:
0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e キャッシュなし ..内容
0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 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..接続

何故ですか?JSON のページに次のような目標を設定できないためです。

私の場合、メーカーの Connect Me 9210 Digi を使用しています。

  • 非標準の MIME を使用することを示すフラグを使用する必要がありました。
  • 変数に新しい MIME を追加しました: strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html; charset = ISO-8859-1 ");

JSONから渡されたデータをUTF-8に変換してから、ページで変換をやり直す必要なく、うまくいきました...

于 2012-03-07T17:22:06.330 に答える
1

encodeURI()クライアントJSで使用しURLDecoder.decode()、サーバーJava側で使用します。


例:

  • Javascript

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

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

于 2012-01-03T02:52:10.867 に答える
0

この関数を使用して、utf-8 文字を復元します

function decode_utf8(s) { 
  return decodeURIComponent(escape(s)); 
}

例: var new_Str=decode_utf8(str);

于 2014-11-12T12:43:55.283 に答える