質問

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

で使用されるエンコーディングを設定する方法 $.getJSON 電話?

役に立ちましたか?

解決

おそらく使用する必要があると思います $.ajax() エンコーディングを変更したい場合は、を参照してください。 contentType 以下のパラメータ( success そして error コールバックはあなたが持っていることを前提としています <div id="success"></div> そして <div id="error"></div> 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);
    }
});

実は、ちょうど 1 時間前にこれを行う必要があったのです。何という偶然でしょう。

他のヒント

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

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

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

オプションについて説明します ここ.

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

scriptCharset : とのリクエストのみ jsonp または script dataType と GET タイプ。リクエストを強制的に特定の文字セットとして解釈させます。リモート コンテンツとローカル コンテンツの間の文字セットの違いの場合にのみ必要です。

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

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

  • シンプルなページの場合 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
  • ページが 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   .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

何故ですか?なぜなら、次のような目標を JSON のページに置くことはできないからです。

私の場合、製造元の Connect Me 9210 Digi を使用しています。

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

それは私にとってはうまくいきました JSON によって渡されたデータを UTF-8 に変換して、ページ上で変換をやり直す必要はありません...

使用 encodeURI() クライアントJSで使用してください URLDecoder.decode() サーバーではJava側が動作します。


例:

  • JavaScript:

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

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

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

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

例:

var new_Str=decode_utf8(str);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top