如何在.getJSON jQuery中设置编码

时间:2008-08-25 18:45:28

标签: jquery ajax json character-encoding

在我的网络应用中,我使用jQuery的$.getJSON()方法提交了一些表单字段。我在编码方面遇到了一些问题。我的应用的字符集为charset=ISO-8859-1,但我认为这些字段是UTF-8提交的。

如何设置$.getJSON来电中使用的编码?

6 个答案:

答案 0 :(得分:43)

如果您想使用$.getJSON(),可以在通话前添加以下内容:

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

您可以使用所需的字符集代替utf-8

选项说明here

contentType :将数据发送到服务器时,请使用此content-type。默认值为application/x-www-form-urlencoded,大多数情况都可以。

scriptCharset :仅适用于jsonpscript dataType和GET类型的请求。强制请求被解释为某个字符集。只需要远程和本地内容之间的字符集差异。

您可能需要一个或两个......

答案 1 :(得分:33)

如果您想更改编码,我认为您可能必须使用$.ajax(),请参阅下面的contentType参数(successerror回调假设你在html中有<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);
    }
});

我实际上只需要在一个小时前做到这一点,真是巧合!

答案 2 :(得分:4)

您需要使用Wireshark分析JSON调用,因此您将看到是否在JSON页面的形成中包含charset,例如:

  • 如果页面很简单,如果是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:                  对 - &GT; theCgiPtr-&GT; = fDataType eRpDataTypeOther;
  • 它在变量中添加了新的MIME:                  strcpy(p-&gt; theCgiPtr-&gt; fOtherMimeType,“text / html; charset = ISO-8859-1“);

它对我有用,无需转换JSON为UTF-8传递的数据,然后在页面上重做转换...

答案 3 :(得分:1)

在客户端JS中使用encodeURI()并在服务器Java端工作中使用URLDecoder.decode()


示例:

  • <强>的Javascript

    $.getJSON(
        url,
        {
            "user": encodeURI(JSON.stringify(user))
        },
        onSuccess
    );
    
  • <强>爪哇

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

答案 4 :(得分:1)

如果要使用$ .getJSON(),可以在调用之前添加以下内容:

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

答案 5 :(得分:0)

使用此功能重新获得utf-8字符

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

示例:

var new_Str=decode_utf8(str);